Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对元组进行两次排序_Python_Sorting_Tuples - Fatal编程技术网

Python 如何对元组进行两次排序

Python 如何对元组进行两次排序,python,sorting,tuples,Python,Sorting,Tuples,比如说, a = [(4, 3), (6, 3), (2, 1), (3, 1)] 如何在不使用itemgetter的情况下对该元组进行两次排序? 我想按第一个key=a[1]和第二个key=a[0]排序。 像这样, a = [(6, 3), (4, 3), (3, 1), (2, 1)] 只需颠倒顺序: sorted(a, reverse=True) 获取新列表或 a.sorted(reverse=True) 对列表进行适当排序 元组是按字典顺序进行比较的,因此首先由第一个元素进行比较

比如说,

a = [(4, 3), (6, 3), (2, 1), (3, 1)]
如何在不使用
itemgetter
的情况下对该元组进行两次排序? 我想按第一个
key=a[1]
和第二个
key=a[0]
排序。 像这样,

a = [(6, 3), (4, 3), (3, 1), (2, 1)]
只需颠倒顺序:

sorted(a, reverse=True)
获取新列表或

a.sorted(reverse=True)
对列表进行适当排序

元组是按字典顺序进行比较的,因此首先由第一个元素进行比较,如果是tie,则由第二个元素进行比较。先按第二个元素排序,然后按第一个元素排序,其顺序与先按第二个元素排序,然后按第一个元素排序的顺序完全相同:

>>> from operator import itemgetter
>>> a = [(4, 3), (6, 3), (2, 1), (3, 1)]
>>> sorted(a, key=itemgetter(1), reverse=True)
[(4, 3), (6, 3), (2, 1), (3, 1)]
>>> sorted(sorted(a, key=itemgetter(1), reverse=True), key=itemgetter(0), reverse=True)
[(6, 3), (4, 3), (3, 1), (2, 1)]
>>> sorted(a, reverse=True)
[(6, 3), (4, 3), (3, 1), (2, 1)]
如果您输入的元组包含两个以上的元素,这些额外的元素必须被忽略,您仍然可以使用
itemgetter()
,因为它支持多个索引(此时它返回这些索引处的值的元组):


为什么两次,为什么没有itemgetter?使用
itemgetter(0,1)
只需一次就可以得到所需的内容。此外,这是默认排序,只需反向。如果您实际包含了一个示例输入列表,如果忽略第二个元素,该列表的排序会有所不同,这会有所帮助。甚至在仅对元组的第二个元素排序时,会产生与输入顺序不同的顺序。。
>>> itemgetter(0, 1)(a[0])
(4, 3)
>>> sorted(a, key=itemgetter(0, 1), reverse=True)
[(6, 3), (4, 3), (3, 1), (2, 1)]