【问题标题】:sorting by first group element in python按python中的第一个组元素排序
【发布时间】:2010-10-05 16:39:03
【问题描述】:

我想知道如何让 python 对我的元组集合进行排序,以便第一个相似的项目会出现分组,并且组按第一个项目排序。

order group
3     1
4     2
2     2
1     1

排序后

order group
1     1
3     1
2     2
4     2

Python 列表

unordered = [(3, 1), (4, 2), (2, 2), (1, 1)]

【问题讨论】:

    标签: python


    【解决方案1】:

    我假设您的意思是 unordered = [(3, 1), (4, 2), (2, 2), (1, 1)],因为您输入的示例部分与其他两个不兼容,对吧?

    如果是,那么

    >>> import operator
    >>> sorted(unordered, key=operator.itemgetter(1,0))
    [(1, 1), (3, 1), (2, 2), (4, 2)]
    

    或者类似unordered.sort(key=operator.itemgetter(1,0)),如果你想就地排序(给定变量名我很确定你不知道——如果它是要排序的,将变量命名为“无序”会很奇怪!-)。

    【讨论】:

    • 是的,我的意思是 (1, 1)。我解决了这个问题
    • 在这种特殊情况下,您还可以使用 key=lambda (a,b): (b,a) 进行排序。 Python 对元组的自然排序从最左边的项开始向右移动;你正试图以相反的方向排序。
    • @Russell,是的,但是 lambda 的速度比 itemgetter 慢。
    • @Alex - 在更长的列表中,timeit 显示的速度快了 12%。我试过 dis() 看看为什么会有区别;是否因为它是本机代码而无法反汇编 itemgetter?
    • @Russell,是的——itemgetter(和attrgetter)是本机代码。要测量实际速度与 lambda,当然除了两者之外不要进行排序,只是一个纯键提取循环;-)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多