如何在使用random.choice()后从列表中删除项目?

时间:2015-12-02 14:21:20

标签: python python-3.x random

我有一个带有列表的Python脚本,我试图从列表中获取随机项并将它们放在变量中,但我注意到当我运行程序几次(大约20次左右)时它将打印出2个相同的项目,如"苹果苹果"。

import random

list = ['apples','grapes','bannas','peaches','pears','oranges','mangos']
a = random.choice(list)
b = random.choice(list)
while a in (list[0],list[1],list[2],list[3],list[4],list[5],list[6]):
    a = random.choice(list)

while b in (list[0],list[1],list[2],list[3],list[4],list[5],list[6]):
    b = random.choice(list)

print(a + ' ' + b)

while循环应该使变量每次都包含一个唯一值,但它不会。

3 个答案:

答案 0 :(得分:2)

while a in (list[0],list[1],list[2],list[3],list[4],list[5],list[6]):相当于while a in list:。由于a只包含列表中的值,因此条件始终为true,循环将永远不会结束,并且您永远不会到达print语句。

要从一个集合中选择多个唯一随机项,请使用sample代替choice

>>> list = ['apples','grapes','bannas','peaches','pears','oranges','mangos']
>>> a,b = random.sample(list, 2)
>>> a
'bannas'
>>> b
'grapes'

答案 1 :(得分:2)

上面的Kevins sample更好,但我认为这是你尝试用choice做的事情:

import random

fruit = ['apples', 'grapes', 'bannas', 'peaches', 'pears', 'oranges', 'mangos']
a_fruit = random.choice(fruit)
b_fruit = random.choice(fruit)

while a_fruit == b_fruit:
    b_fruit = random.choice(fruit)

print("{} - {}".format(a_fruit, b_fruit))

一些评论:

  • list是python的build in function。永远不要列出某些名单(或dict或del等)
  • 正如凯文所提到的,虽然循环是无用的,并且会永远运行,因为它应该总是评估为真。

答案 2 :(得分:0)

另一种选择:如果您不关心列表,我会使用pop,如果您这样做,那么您可以制作副本,然后使用pop(I fon& #39;知道你想如何使用你的清单。

idx = random.randint(0,len(fruit_list))
a = fruit_list.pop(idx)

idx = random.randint(0,len(fruit_list))
b = fruit_list.pop(idx)

print(a + ' ' + b)

另一种方法是对列表进行加扰/随机播放,然后按顺序逐个拾取项目。

random.shuffle(fruit_list)
a = fruit_list[0]
b = fruit_list[1]

print(a + ' ' + b)

再次使用pop:

random.shuffle(fruit_list)
a = fruit_list.pop()
b = fruit_list.pop()

print(a + ' ' + b)