【问题标题】:Custom Python Sort: Double Precedence自定义 Python 排序:双重优先级
【发布时间】:2013-01-24 02:44:36
【问题描述】:

我想为我的 Python 代码使用内置的 sort() 函数进行自定义排序,但可以根据两个值对列表进行排序。我要排序的列表结构为元组列表,每个元组包含 2 个整数。我要做的排序是根据每个元组的第一个整数对元组列表进行排序,但是如果两个第一个整数并列,它指的是它们的第二个整数,这是唯一的,因此不会相同。我想使用内置 sort() 函数的速度,但能够以这种方式排序。非常感谢任何和所有帮助!

【问题讨论】:

  • sorted() 在这里可能更适用,但我不知道有什么区别!
  • sorted() 返回原始列表的新排序副本,而sort() 修改原始列表。

标签: python sorting built-in


【解决方案1】:

内置 sorted 可以做到这一点。

>>> l = [(1, 1), (1, 2), (2, 5), (2, 4)]
>>> sorted(l)
[(1, 1), (1, 2), (2, 4), (2, 5)]

sort()sorted() 之间的区别在于sort() 修改了给定的列表(因此,任何其他共享其结构的列表),而sorted() 接受一个可迭代的,并返回一个全新的列表对象。

例如:

>>> a = list("alphabet")
>>> a
['a', 'l', 'p', 'h', 'a', 'b', 'e', 't']
>>> b = a
>>> b
['a', 'l', 'p', 'h', 'a', 'b', 'e', 't']
>>> b.sort()
>>> #this has modified the shared structure
>>> a
['a', 'a', 'b', 'e', 'h', 'l', 'p', 't']

相对于sorted()

>>> c = list("alphabet")
>>> d = c
>>> sorted(d)
['a', 'a', 'b', 'e', 'h', 'l', 'p', 't']
>>> c
['a', 'l', 'p', 'h', 'a', 'b', 'e', 't']

sorted() 更安全。

【讨论】:

  • 我想你的意思是sorted()
  • sort 不是全局函数。你的意思可能是l.sort()。不同之处在于l.sort() 对列表进行就地排序,而sorted(l) 返回一个包含已排序项目的新列表。
【解决方案2】:

您刚刚描述了 list.sort() 方法的确切行为,因此一旦您将元组放入列表中,只需调用不带参数的列表的排序方法 (l.sort),它将被放入想要的顺序。

当需要更复杂的排序时,您可以将“键函数”作为命名参数传递,键。该函数应用于列表的每个元素以生成一个排序键,然后将元素按照其排序键的顺序进行排序。

当您需要列表的排序副本时,sorted 内置函数很方便 - 它只是为您省去了创建副本然后调用其排序方法的麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2014-08-05
    相关资源
    最近更新 更多