2017-03-08 53 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