Random without repetition in Python

99封情书 提交于 2020-07-13 15:49:14

问题


I want to write a program that displays all the elements of a list in random order without repetition. It seems to me that it should work, but only prints those elements with repetition.

import random

tab = []

for i in range(1, 8):
    item = random.choice(["house", "word", "computer", "table", "cat", "enter", "space"])
    if item not in tab:
        print(item)
    else:
        tab.append(item)
        continue

回答1:


Instead of random.choice within the for loop, use random.shuffle here.

This way, your list is guaranteed to be have all the elements, while also maintaining the requirement of random order:

>>> import random
>>> tab = ["house", "word", "computer", "table", "cat", "enter", "space"]
>>> random.shuffle(tab)
>>> print tab

As for your original code, that will not work, since the if else block as you've written ensures that no element is added within the list tab. You could correct that by removing the else block like below:

>>> for i in range(1, 8):
...     item = random.choice(["house", "word", "computer", "table", "cat", "enter", "space"])
...     if item not in tab:
...         print(item)
...         tab.append(item)
... 
house
cat
space
enter

But now you will need to alter the logic so that the runs in which same value is randomly returned don't affect the number of outputs.




回答2:


Read about capabilities of Random library. It can write simpler. For example:

import random

data = ["house", "word", "computer", "table", "cat", "enter", "space"]
x = random.sample(data, len(data))
print(x)



回答3:


import random
items = ["house", "word", "computer", "table", "cat", "enter", "space"]
tab= []
while len(tab) < len(items):
    item = random.choice(items)
    if item not in tab:
    tab.append(item)
print(tab)

    


来源:https://stackoverflow.com/questions/30735892/random-without-repetition-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!