自定义Python排序:双重优先

时间:2013-01-24 02:44:36

标签: python sorting built-in

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

2 个答案:

答案 0 :(得分:2)

内置sorted可以做到这一点。

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

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

例如:

>>> 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()更安全。

答案 1 :(得分:0)

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

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

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