2012-10-26 117 views
4

我目前正在嘗試創建一個程序,它從列表中爲用戶每次隨機選擇兩個項目進行比較,不包括兩次比較兩個項目相同的項目本身列表中的Random.Choice從不比較兩個列表元素兩次(Python)

list1 = ['item1', 'item2', 'item3', 'item4', 'item5'] 

list1,我想用一個random.choice:

item_chosen = random.choice(list1) 
print(item_chosen) 
item_chosen2 = random.choice(list1) 
print(item_chosen2) 

這裏的問題是,item_chose可能是相同的item_chosen2,那如果我設置一個循環,同樣的比較將不止一次。此外,當所有列表項目已相互比較時,程序需要實現(在每個組合中,手動編碼所有多個項目之間的比較將花費太長時間)。

回答

5

使用random.sample

item1, item2 = random.sample(list1, 2) 

這得到從list1兩個獨特的元件(即item1item2保證是不同)。

+0

非常感謝你nneonneo,我會random.sample使用,而不是random.choice – Joseph

+0

'random.sample'不會刪除項目從列表中。隨後的通話可以選擇已經選擇的項目,因此可以選擇兩個項目兩次。 –

+0

您可以使用random.sample並從主列表中刪除項目。但是如果您的原始列表包含重複項,您將得到相同的編號 – Anurag

1

隨機清單(使用random.shuffle)並從混洗列表中依次取兩個項目。

+0

我收到了我的random.choice問題的解決方案。相反,解決方案顯然是使用random.sample或random.shuffle。我很欣賞反饋! 現在我只是遇到第二個問題,即允許程序在所有項目進行比較時都能夠實現,以便終止。有人知道random.shuffle是否有能力做到這一點(在我重新編碼我的整個程序之前)。 ;) 謝謝大家, Joseph – Joseph

+0

謝謝Bill!我會嘗試實現這個random.shuffle。 – Joseph

+0

@約瑟夫沒問題。要比較所有項目,在將列表拖動之後,只需循環播放它,並在每次循環中彈出兩個項目。 –

1

你可能最好使用random.shuffle()代替random.choice()

list1 = ['item1', 'item2', 'item3', 'item4', 'item5'] 

random.shuffle(list1) 
item_chosen = list1.pop() 
print(item_chosen) 
item_chosen2 = list1.pop() 
print(item_chosen2) 
+0

非常感謝這個例子,Zero!我認爲它涵蓋了我需要的一切,在我的程序中實現random.shuffle。 – Joseph