【问题标题】:No list returned by random.shuffle() [duplicate]random.shuffle() 没有返回列表 [重复]
【发布时间】:2020-05-15 02:25:51
【问题描述】:

我以两种不同的方式编写了一些代码,我认为它们完全一样,但我得到了两个截然不同的答案:

第一种方法完全符合预期:

test_listA = list(range(0, 5))
random.shuffle(test_listA)
print(test_listA)

打印出来了:

[2, 1, 0, 3, 4]

但是当我像这样重新组织它时:

test_listB = random.shuffle(list(range(0, 5)))
print(test_listB)

打印出来:

None

为什么不一样?

【问题讨论】:

  • random.shuffle 工作到位。
  • 我不明白为什么这会被如此低估。
  • 这两个不一样。在第二种情况下,您将函数调用的结果分配给变量,但函数返回None。通常,函数或方法会发生变异以返回 None 是惯例(大多数情况下都是如此,但 list.pop 等一些例外情况除外)
  • @CeliusStingher 这个问题被否决了,因为它自 2013 年以来已经有了关于 SO 的答案。

标签: python


【解决方案1】:

问题

random.shuffle 返回None 并将原始列表打乱。来自文档:

随机播放序列 x

random.shuffle 返回的值 (None) 分配回混洗列表会将变量的值设置为 None


解决方案

您可以复制对象并在副本上工作:

import copy
import random


a = [1, 2, 3, 4]
b = copy.copy(a)
random.shuffle(b)

print(f"a = {a}")
print(f"b = {b}")

a = [1, 2, 3, 4]

b = [1, 3, 4, 2]

【讨论】:

  • 能否请您添加一个可能的解决方案? :D
  • @CeliusStingher,问题包含解决方案
  • 感谢@Infinity,现在一切都清楚了。 +1
  • 嗯,问题在于它返回None,因为 OP 已经知道它可以正常工作。这是一个约定,一个函数会改变其输入以返回None,但这不一定是正确的
  • 感谢您的反馈。我已经相应地编辑了答案:)
猜你喜欢
  • 1970-01-01
  • 2018-05-11
  • 2013-07-13
  • 2022-01-15
  • 2018-06-25
  • 1970-01-01
  • 2014-05-03
  • 2015-10-04
相关资源
最近更新 更多