Python:只返回所有项目一次,但随机选择。项不应在输出中重复



我希望从列表中输出所有项目(一次一个项目),但以随机顺序输出,并且在输出中不重复,已经迭代的项目不应该再次显示

这是我得到的,但是,在我的输出中,我每次都得到重复的。

import random
fruits = ['apple','banana','dragonfruit','kiwi','loganberry','mandarin','mango','pineapple']
for fruit in fruits:
    fruit = random.choice(fruits)
    #do something
    print(fruit)
output:
banana
apple
mango
kiwi
mango
dragonfruit
banana
banana

i have try, random.choice(), random.shuffle(), random.sample()。但是输出总是重复的。我怎么解决这个问题?此外,我已经在stackoverflow中搜索了可能的解决方案,但在这些示例中,只有1项作为最终输出。

使用shuffle从随机模块,使您更容易-

random.shuffle(fruits)
for fruit in fruits:
    
    #do something
    print(fruit)

这不会给出任何重复项,但它会给出如果列表为任何重复项。(见@hobbs评论)

查看文档了解更多类似的方法。

结果:

pineapple # Of course next time different result
banana
apple
dragonfruit
mango
loganberry
kiwi
mandarin
最简单的方法:
import random
fruits = ['apple','banana','dragonfruit','kiwi','loganberry','mandarin','mango','pineapple']
for f in random.sample(fruits, len(fruits)):
    print(f)

显示(好吧,一种可能性):

banana
kiwi
apple
mandarin
dragonfruit
loganberry
mango
pineapple

注意,这不会以任何方式改变原始列表。

只需从选项中删除使用过的水果。

import random
fruits = ['apple','banana','dragonfruit','kiwi','loganberry','mandarin','mango','pineapple']
fruitsCopy = fruits.copy()
for fruit in fruits:
    fruit = random.choice(fruitsCopy)
    fruitsCopy.remove(fruit)
    print(fruit)

最新更新