我有一个带有列表的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循环应该使变量每次都包含一个唯一值,但它不会。
答案 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)