0

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

4

2 回答 2

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()接受一个可迭代对象,并返回一个全新的列表对象。

例如:

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

于 2013-01-24T02:46:45.883 回答
0

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

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

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

于 2013-01-24T03:01:52.653 回答