【问题标题】:Can not do in place sort and assigned to a variable in python [duplicate]无法就地排序并分配给python中的变量[重复]
【发布时间】:2014-12-13 20:51:22
【问题描述】:

我在 python 中有一个基本问题: 我想使用 list.sort() 对列表进行排序并分配给变量。它似乎不起作用,为什么?

Q2 = [0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25]
Q3 = Q2.sort()
Q3 # prints nothing

我想知道为什么如果我打印 Q2,Q2 已经排序,为什么会这样 谢谢。

【问题讨论】:

  • 小心!列表是mutable!这意味着,如果您使用 then sort() 方法,您将触及列表本身!

标签: python sorting


【解决方案1】:

sort 就地,不返回任何内容。您必须使用 sorted 来排序并返回已排序列表的副本,但不会修改 Q2。

>>> Q3 = sorted(Q2)
>>> Q3
[0, 0, 1, 1, 2, 3, 4, 4, 5, 9, 16, 25]

sort 只是用来对列表进行排序而无需复制

>>> Q2.sort()
>>> Q2
[0, 0, 1, 1, 2, 3, 4, 4, 5, 9, 16, 25]

【讨论】:

  • sorted 返回一个排序列表?我遇到了一些有趣的事情。在添加排序乐趣之前,人们习惯于对其进行排序然后分配?谢谢。
  • "sorted 返回一个排序列表" 是的,看看我刚才展示的例子。如果要分配给另一个变量,则必须使用sorted,因为sort 返回None
  • 谢谢。但我想知道的是,python 2.4(也许)中添加了 sorted 之前人们是如何做到的。
  • 你可以分两步完成。您可以先调用Q2.sort(),然后分配Q3 = Q2,或者直接使用Q2
  • @juggernaut 你先复制列表,然后排序。 Q3 = list(Q2) 然后Q3.sort()。这基本上就是 sorted() 所做的。
【解决方案2】:

如果你真的坚持让它到位,你可以这样做:

Q3 = "lolz" if Q2.sort() else Q2

但我不明白它的意义:)

您应该使用返回排序列表的sorted(Q2)

【讨论】:

  • 谢谢。这是一个很棒的社区和非常聪明的程序员。这是我的第一篇文章。反应也很快。
  • 如果我是 Python 新手并阅读了此回复,我会非常非常困惑......实际上我可能会提出您的建议,因为我不会知道更好。笑话的反应很有趣,但有时新手不明白这个笑话。
  • 实际上我的 cmets 之所以如此,是因为我在过去 6 个月里一直在阅读 stackoverflow,而社区为问题提供的回复和替代方案是我在其他地方从未见过的。很漂亮。
  • @jme 这不是只是个玩笑。如果由于某种原因您需要对列表进行适当的排序并以功能方式进行 - 这是一种方法。假设在列表理解中,或在 reduce... 显然理解您正在使用的代码很重要。
  • 你有这个“技巧”的例子吗?如果你说它有价值,那么我相信你,但我不能说我曾经觉得需要它。突变和功能编码通常不能很好地混合。
猜你喜欢
  • 2020-11-21
  • 2020-07-25
  • 1970-01-01
  • 2015-09-30
  • 2016-03-27
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多