我想编写一个程序,以随机顺序显示列表的所有元素而不重复。 在我看来它应该工作,但只打印那些重复的元素。
org.springframework.security.oauth2.client.http.AccessTokenRequiredException
答案 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)