2017-03-08 25 views
0

我想洗牌的琴弦发生在我的名单,如何洗牌字符串列表的顺序?

words = ['red', 'adventure', 'cat', 'cat'] 

预期结果:

words = ['cat', 'adventure', 'red', 'cat'] #changes everytime it's called 

我试图从随机库洗牌,但它给了我一个None错误。

编辑

对不起,我忘了,以显示我的尝试:

from random import shuffle 
words = ['red', 'adventure', 'cat', 'cat'] 
newwords = shuffle(words) 
print(newwords) 
+2

“我试图与洗牌从随机库,但它给我一个无错误。“你需要向我们展示你实际做了什么。 – Denziloe

+4

'无'不是错误。 'random.shuffle()'将这个列表重新排序并返回'None'。洗牌后检查“单词”的内容。 – glibdud

+1

[为什么random.shuffle返回无?](http://stackoverflow.com/questions/17649875/why-does-random-shuffle-return-none) –

回答

12

这是因为random.shuffle洗牌到位,不返回任何东西(所以为什么你None)。

import random 

words = ['red', 'adventure', 'cat', 'cat'] 
random.shuffle(words) 

print(words) # prints ['cat', 'cat', 'red', 'adventure'] 

编辑:

鉴于你的编辑,你需要改变的是:

from random import shuffle 

words = ['red', 'adventure', 'cat', 'cat'] 
newwords = words[:] # Copy words 
shuffle(words) # Shuffle newwords 

print(newwords) # prints ['cat', 'cat', 'red', 'adventure'] 

from random import shuffle 

words = ['red', 'adventure', 'cat', 'cat'] 
newwords = random.sample(words, len(words)) # Copy and shuffle 

print(newwords) # prints ['cat', 'cat', 'red', 'adventure'] 
+0

这正是我所尝试的,但它打印无 – Lindow

+1

@Lindow你可能会像'words = random.shuffle(words)'或'print(random.shuffle(words))'这样做,这就是为什么它会打印'None'。 – Vallentin

+0

'new_words = random.shuffle(words)'我不能只将这个列表分配给一个新的变量吗? – Lindow