Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一次随机选择后不使用列表中的元素_Python_Python 2.7 - Fatal编程技术网

Python 一次随机选择后不使用列表中的元素

Python 一次随机选择后不使用列表中的元素,python,python-2.7,Python,Python 2.7,我有一个随机选择一些字符的程序,比如: things = ("doge", "cat", "actual dog", "rabbit") for i in range(20): print random.randint(1, len(things))-1 我希望不再选择doge。一旦从列表中随机选择事物。我该怎么做?请给出一种可以在各种情况下工作的方法。谢谢 您可以使用random.sample。例如: import random x = range(10) y = random.sa

我有一个随机选择一些字符的程序,比如:

things = ("doge", "cat", "actual dog", "rabbit")
for i in range(20):
    print random.randint(1, len(things))-1

我希望不再选择
doge
。一旦从列表中随机选择
事物
。我该怎么做?请给出一种可以在各种情况下工作的方法。谢谢

您可以使用
random.sample
。例如:

import random
x = range(10)
y = random.sample(x, 4) # Pick 4 distinct elements from x

这将只打印整数,而不是列表中的元素。最简单的方法是将其从列表中删除。或者,您可以通过临时列表存储使用过的值来跟踪而不改变列表,如果i==temp_i:pass,则
edit:有一种更简单的方法。您计划如何从一个四元素列表中进行20个随机选择?!另外,
random.randrange(len(things))
更整洁。@jornsharpe有些选择会重复,但有一个只会重复一次。@SomeGuy,嗯?有些选项会重复,但其中一个选项只会重复一次-你能举个例子吗?@RUJordan:
random
模块包含许多常见情况下的功能(例如
random.shuffle
随机混合列表)。请看@6502我的第一个想法是我不太理解这个问题,第二个想法是我可能只是从
事物和
随机创建一个
列表,每次都将其洗牌。对于一次运行,我认为sample会赢,对于多次运行,我猜洗牌(在适当的位置,不创建新列表)会更好。@JonClements:使用
random.sample
元素是在循环之前选择的,也就是说,您只需对random中的元素执行
。sample(L,n):…
。相反,如果您不知道要使用多少元素,可以使用
random.shuffle
复制列表,并在需要时停止。如果列表在迭代过程中发生变化,问题就更复杂了。。。