【问题标题】:Sorting list of tuples (Python)元组的排序列表(Python)
【发布时间】:2021-09-11 19:20:33
【问题描述】:

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

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

我的目标是:在 (n log n) 时间内根据集合的第一个元素对列表进行降序排序,如果两个集合的第一个元素相同,则排序根据第二个元素降序排列。 --> 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 时间内。

你能帮我解决这个问题吗? 谢谢!

【问题讨论】:

    标签: python sorting tuples


    【解决方案1】:

    要根据这两个值进行排序,请删除键功能:

    >>> 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) 进行排序,有关更多信息,请查看 Wikipedia 上的 Timsort,这是 Python 用于排序的算法。

    【讨论】:

      【解决方案2】:

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

      A.sort(reverse = True)
      

      按要求输出。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          你去吧:

          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)
          

          【讨论】:

            【解决方案5】:

            至于补充对方的优秀答案。在 Google 上搜索“python 列表排序时间复杂度”将为您返回您所寻求的关于 python 排序时间复杂度的内容(其他人已经在上面写过)。

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

            【讨论】:

              猜你喜欢
              • 2011-07-25
              • 2014-05-11
              • 1970-01-01
              • 2017-02-04
              • 2021-04-10
              • 2017-02-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多