2015-06-09 74 views
1

我想編寫一個程序,以隨機順序顯示列表中的所有元素而不重複。 在我看來,它應該工作,但只打印重複的元素。在Python中沒有重複的隨機

import random 

tab = [] 

for i in range(1, 8): 
    item = random.choice(["house", "word", "computer", "table", "cat", "enter", "space"]) 
    if item not in tab: 
     print(item) 
    else: 
     tab.append(item) 
     continue 
+0

的可能重複的[洗牌在python對象的列表(http://stackoverflow.com/questions/976882/shuffling-a-list-of-objects-in-python) – soon

+0

@AbroT你能解決這個問題嗎? –

回答

5

取而代之的for環內random.choice,使用random.shuffle這裏。

這樣,你的列表是保證所有部件,同時保持隨機順序的要求:

>>> import random 
>>> tab = ["house", "word", "computer", "table", "cat", "enter", "space"] 
>>> random.shuffle(tab) 
>>> print tab 

至於你的原代碼,這是行不通的,因爲如您所寫,if else塊確保在列表tab內沒有添加任何元素。你可以糾正,通過像下面去掉else塊:

>>> for i in range(1, 8): 
...  item = random.choice(["house", "word", "computer", "table", "cat", "enter", "space"]) 
...  if item not in tab: 
...   print(item) 
...   tab.append(item) 
... 
house 
cat 
space 
enter 

但現在你需要改變邏輯,這樣在相同的值是隨機返回的運行不會影響輸出的數量。

3

閱讀隨機庫的功能。 它可以寫得更簡單。例如:

import random 

data = ["house", "word", "computer", "table", "cat", "enter", "space"] 
x = random.sample(data, len(data)) 
print(x)