如何随机播放对象列表?我试过 random.shuffle
:
import random
b = [object(), object()]
print(random.shuffle(b))
但它输出:
None
原文由 utdiscant 发布,翻译遵循 CC BY-SA 4.0 许可协议
如您所知,就地洗牌是问题所在。我也经常遇到问题,而且似乎也经常忘记如何复制列表。使用 sample(a, len(a))
是解决方案,使用 len(a)
作为样本量。有关 Python 文档,请参阅 https://docs.python.org/3.6/library/random.html#random.sample 。
这是一个使用 random.sample()
的简单版本,它将洗牌后的结果作为新列表返回。
import random
a = range(5)
b = random.sample(a, len(a))
print a, b, "two list same:", a == b
# print: [0, 1, 2, 3, 4] [2, 1, 3, 4, 0] two list same: False
# The function sample allows no duplicates.
# Result can be smaller but not larger than the input.
a = range(555)
b = random.sample(a, len(a))
print "no duplicates:", a == list(set(b))
try:
random.sample(a, len(a) + 1)
except ValueError as e:
print "Nope!", e
# print: no duplicates: True
# print: Nope! sample larger than population
原文由 Ted 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答4.5k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
4 回答3.9k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
2 回答466 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
random.shuffle
应该工作。这是一个示例,其中对象是列表:请注意
shuffle
就地 工作,并返回None
。更一般地,在 Python 中,可变对象可以传递给函数,当函数改变这些对象时,标准是返回
None
(而不是说,变异对象)。