我想要对列表中的元素进行随机排序。
from random import shuffle
words = ['red', 'adventure', 'cat', 'cat']
shuffled = shuffle(words)
print(shuffled) # expect new order for, example ['cat', 'red', 'adventure', 'cat']
作为响应,我得到了None
,为什么?这是因为random.shuffle
是就地混洗,不会返回任何内容(因此您会得到None
)。
import random
words = ['red', 'adventure', 'cat', 'cat']
random.shuffle(words)
print(words) # Possible Output: ['cat', 'cat', 'red', 'adventure']
编辑:
根据您的编辑,您需要更改的是:
from random import shuffle
words = ['red', 'adventure', 'cat', 'cat']
newwords = words[:] # Copy words
shuffle(newwords) # Shuffle newwords
print(newwords) # Possible Output: ['cat', 'cat', 'red', 'adventure']
或者from random import sample
words = ['red', 'adventure', 'cat', 'cat']
newwords = sample(words, len(words)) # Copy and shuffle
print(newwords) # Possible Output: ['cat', 'cat', 'red', 'adventure']
words = random.shuffle(words)
或者 print(random.shuffle(words))
,这就是为什么它会打印出 None
。 - vallentinsorted
返回一个新列表,不会改变给定的列表。而 shuffle
改变给定的列表,不返回新的/副本。 - vallentinrandom.shuffle() 是一个没有返回值的方法。因此,当你将它赋值给一个标识符(比如变量x)时,它返回'none'。
None
不是错误。random.shuffle()
会就地打乱列表并返回None
。在洗牌后检查words
的内容即可。 - glibdud