2012-10-26 229 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