随机排列对象列表
如何随机排列对象列表?我尝试了 random.shuffle
:
import random
b = [object(), object()]
print(random.shuffle(b))
但它输出:
None
如何随机排列对象列表?我尝试了 random.shuffle
:
import random
b = [object(), object()]
print(random.shuffle(b))
但它输出:
None
random.shuffle
应该可以工作。下面是一个示例,其中对象是列表:
from random import shuffle
x = [[i] for i in range(10)]
shuffle(x)
print(x)
# print(x) gives [[9], [2], [7], [0], [4], [5], [3], [1], [8], [6]]
请注意,该操作就地有效,并返回 。shuffle
None
更一般地说,在Python中,可变对象可以传递到函数中,当函数改变这些对象时,标准是返回(而不是,比如说,突变的对象)。None
正如您了解到的那样,就地洗牌是问题所在。我也经常遇到问题,并且似乎也经常忘记如何复制列表。使用是解决方案,用作样本大小。有关 Python 文档,请参阅 https://docs.python.org/3.6/library/random.html#random.sample。sample(a, len(a))
len(a)
下面是一个使用的简单版本,它将随机播放的结果作为新列表返回。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