【问题标题】:python Difference between reversed(list) and list.sort(reverse=True)python reversed(list) 和 list.sort(reverse=True) 的区别
【发布时间】:2012-04-15 17:11:08
【问题描述】:

有什么区别

mylist = reversed(sorted(mylist))

mylist = sorted(mylist, reverse=True)

为什么要使用一个而不是另一个?

如何在多个列上进行稳定排序,例如

mylist.sort(key=itemgetter(1))
mylist.sort(key=itemgetter(0))
mylist.reverse()

和这个一样吗

mylist.sort(key=itemgetter(1), reverse=True)
mylist.sort(key=itemgetter(0), reverse=True)

?

【问题讨论】:

    标签: python sorting


    【解决方案1】:

    您已经准确找到了不同之处。由于Timsort 是稳定的,反向排序与反向排序将使未排序的 元素处于相反的顺序。

    >>> s = ((2, 3, 4), (1, 2, 3), (1, 2, 2))
    >>> sorted(s, key=operator.itemgetter(0, 1), reverse=True)
    [(2, 3, 4), (1, 2, 3), (1, 2, 2)]
    >>> list(reversed(sorted(s, key=operator.itemgetter(0, 1))))
    [(2, 3, 4), (1, 2, 2), (1, 2, 3)]
    

    【讨论】:

    • 谢谢,对于一般用例,这可能并不重要。
    • 对。如果您无论如何都要对整个事物进行排序,那么它们会给出相同的结果。
    【解决方案2】:

    你得到一个sorted() 的列表,但reversed() 返回一个迭代器

    【讨论】:

      【解决方案3】:

      有趣的不变量是:

      list(reversed(sorted(reversed(data)))) == sorted(data, reverse=True)
      

      其他受访者认为差异与保持相等键顺序的排序稳定性有关。 sorted() 返回一个列表,而 reversed() 返回一个迭代器。

      【讨论】:

      • 你说的迭代器。我猜那是你的然后之一
      • 是的,事实上是:-)
      猜你喜欢
      • 2016-04-26
      • 2019-01-08
      • 2022-06-13
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多