在Python中随机不重复

时间:2015-06-09 15:04:39

标签: python random

我想编写一个程序,以随机顺序显示列表的所有元素而不重复。 在我看来它应该工作,但只打印那些重复的元素。

org.springframework.security.oauth2.client.http.AccessTokenRequiredException

4 个答案:

答案 0 :(得分:5)

而不是random.choice循环中的for,请在此处使用random.shuffle

这样,您的列表可以保证包含所有元素,同时还保持随机顺序的要求:

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

至于原始代码,这不起作用,因为您编写的if else块确保列表tab中没有添加任何元素。您可以通过删除下面的else块来纠正错误:

>>> 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

但现在您需要更改逻辑,以便随机返回相同值的运行不会影响输出的数量。

答案 1 :(得分:3)

了解随机库的功能。 它可以写得更简单。例如:

import random

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

答案 2 :(得分:0)

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)

    

答案 3 :(得分:0)

正如 Anshul 指出的那样,随机 shuffle 的使用很棒:

import random

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

然而,如果您不想导入随机库,可以解决如下问题:

options_shuffled = []
options = ["house", "word", "computer", "table", "cat", "enter", "space"]
while len(options) > 0:
    random_bytes = open('/dev/urandom', 'rb').read(4)
    idx = int(int.from_bytes(random_bytes, 'big') / 2 ** (8 * 4) * len(options))
    options_shuffled.append(options[idx])
    del options[idx]

print (options_shuffled)