如何对列表中的顺序进行随机排列?

19

我想要对列表中的元素进行随机排序。

from random import shuffle
words = ['red', 'adventure', 'cat', 'cat']
shuffled = shuffle(words)
print(shuffled) # expect new order for, example ['cat', 'red', 'adventure', 'cat']
作为响应,我得到了None,为什么?

2
我尝试使用随机库中的shuffle函数,但它给了我一个None错误。你需要向我们展示你实际上做了什么。 - Denziloe
4
None不是错误。random.shuffle()会就地打乱列表并返回None。在洗牌后检查words的内容即可。 - glibdud
1
可能是为什么random.shuffle返回None?的重复问题。 - Chris_Rands
2个回答

42

这是因为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']

2
@Lindow 你可能已经这样做了 words = random.shuffle(words) 或者 print(random.shuffle(words)),这就是为什么它会打印出 None - vallentin
“shuffles in place and doesn't return anything”是什么意思?复制列表如何解决问题?列表和列表副本之间有什么区别? - Reihan_amn
1
例如,sorted 返回一个新列表,不会改变给定的列表。而 shuffle 改变给定的列表,不返回新的/副本。 - vallentin

2

random.shuffle() 是一个没有返回值的方法。因此,当你将它赋值给一个标识符(比如变量x)时,它返回'none'。


不错的答案,但或许需要编辑以显示如何打印正确的列表。 - Tls Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接