元组排序列表 (Python)

Sorting list of tuples (Python)

我是 python 的新手,出于练习的原因,我正在尝试解决以下任务:

给定一个元组列表 A = [(17, 8), (17, 12), (7, 2), (9, 15), (9, 17), (1, 4), (3, 9), (12, 14)]

我的目标是:根据集合的第一个元素,如果两个集合的第一个元素是同理,按照第二个元素降序排列。 --> x <= x', y <= y'

所以,我想得到结果: A = [(17, 12), (17, 8), (12, 14), (9, 17), (9, 15), (7, 2), (3, 9), (1, 4)]

我试过使用以下代码:

A.sort(reverse = True, key=lambda x: x[0] )

但它只是根据第一个元素排序,我知道它是否在 n log n 时间。

你能帮我一下吗? 谢谢!

要根据两个值进行排序,删除关键函数:

>>> A.sort(reverse = True)
>>> A
[(17, 12), (17, 8), (12, 14), (9, 17), (9, 15), (7, 2), (3, 9), (1, 4)]

是的,Python 在 O(n log n) 中排序,有关更多信息,请查看维基百科上的 Timsort,算法 Python 用于排序。

元组自然地按第一个元素排序,然后是第二个元素:

A.sort(reverse = True)

按要求输出。

Python 带有比较函数(类似于 C++)的内置 sorted() 方法可以工作

sorted(tup, key = lambda x: x[0])

好了:

A = [(17, 8), (17, 12), (7, 2), (9, 15), (9, 17), (1, 4), (3, 9), (12, 14)]

reverse_sorted = []

for item in reversed(sorted(A)):
    reverse_sorted.append(item)
    
print(reverse_sorted)

至于补充一下对方的优秀答案。使用“python 列表排序时间复杂度”在 Google 上搜索将 return 为您提供有关 python 的排序时间复杂度(其他人已经在上面写过)的内容。

此外,如果您需要停止使用 python 的内置排序功能。多年来创建了许多不同的 sorting algorithms,您可以重新创建它们具有所需的时间复杂度。如果您是一般编程新手,这将是一个很好的“培训”练习。