【问题标题】:Sorting a list of tuples (Python 3.5)对元组列表进行排序(Python 3.5)
【发布时间】:2017-03-23 14:15:51
【问题描述】:

对(x, y) 的元组列表进行排序的最佳方法是什么。我想根据x 进行排序,但是当有相同值的x 时,我想根据y 进行拆分和排序。

【问题讨论】:

    标签: python list sorting tuples python-3.5


    【解决方案1】:

    对于共享第一个 x 值但 y 值不同的两个元素元组的给定列表:

    t = [(1, 2), (1, 1), (1, 5), (2, 3), (2, 6)]
    

    您可以简单地通过sorted(或sort)根据您的标准进行排序,因为tuples(在列表中)在排序时会考虑所有元素:

    >>> sorted(t)  
    [(1, 1), (1, 2), (1, 5), (2, 3), (2, 6)]
    

    也就是说,第一个匹配值的冲突通过检查序列中的下一个值来解决,直到其中一个值小于另一个(即lexicographical sorting)。

    如果没有找到解决冲突的值,Python 将保留在输入序列中找到的顺序。这是排序的另一个特性,称为stability。

    【讨论】:

    • 之所以有效,是因为序列(包括元组)是按字典顺序进行比较的,即比较第一个项目,如果相等,则比较第二个项目,等等。Docs here.
    • 另外,如果您已经在列表中有元组并且不介意修改它,list.sort() 会更有效率,因为它不必将它们分配/复制到新的首先列出(sorted will)。
    • @BenHoyt 是的,是的,sorted 返回列表意味着它在交互式解释器中输出,需要通过按 <enter> 明确地 print 或 repr 它来转换为减少复制和粘贴。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多