Python只使用random / choice输出一次字符串

时间:2014-01-14 22:33:06

标签: python list random

我正在尝试在Python中创建一个小程序,从列表中选择一个随机字符串并打印字符串。但通常程序会选择相同的字符串两次。

有没有办法确保每个字符串只输出一次?

到目前为止我的代码:

from random import choice
food = ['apple', 'banana', 'strawberry', 'blueberry', 'orange']
print 'You should eat today :' + choice(food)
print 'You should eat tomorrow :' + choice(food)

5 个答案:

答案 0 :(得分:5)

如果您之后不关心列表的排序,您可以先将列表重新排序,然后迭代它。

import random
food = ['apple', 'banana', 'strawberry', 'blueberry', 'orange']
random.shuffle(food)

for f in food:
    print f

如果你不需要立即使用它们,你应该只在需要时弹出一个项目(这将耗尽列表)。

import random
food = ['apple', 'banana', 'strawberry', 'blueberry', 'orange']
random.shuffle(food)

try:
    print food.pop()
except IndexError:
    print "No more food left!"

# ....
# some more code
# I'm hungry!

try:
    print food.pop()
except IndexError:
    print "No more food left!"

# etc.

尝试...除了需要处理你想从空列表中获取食物的情况。

答案 1 :(得分:3)

today = choice(food)
tomorrow = today
while tomorrow == today:
    tomorrow = choice(food)
print 'You should eat today : {}'.format(today)
print 'You should eat tomorrow : {}'.format(tomorrow)

答案 2 :(得分:2)

而不是choice,请使用sample

today, tomorrow = random.sample(food, 2)

来自文档:

  

random.sample(population, k)

     

返回从k序列中选择的唯一元素的population长度列表。用于无需替换的随机抽样。

答案 3 :(得分:1)

我使用random.sample

>>> from random import sample
>>> food = ['apple', 'banana', 'strawberry', 'blueberry', 'orange']
>>> sample(food, 2)
['banana', 'blueberry']
>>> sample(food, 2)
['orange', 'apple']
>>> today, tomorrow = sample(food, 2)
>>> today
'banana'
>>> tomorrow
'blueberry'

答案 4 :(得分:1)

如果您不关心在此过程中销毁列表,可以使用此功能而不是选择。

import random

def del_choice(food):
    if food:
        return food.pop(random.randrange(len(food)))
    return None