我正在使用python 3.2,我花了很多时间来解决这个问题,但我似乎仍然无法理解它。
number = random.randint ( x0 ,xn )
我在生成一个随机数。它的目的是让我的代码每次都以不同的方式出现。
例如,我写了10个文本变量。我已经解决了这些变量在每次程序运行时不以相同的顺序出现的问题。
我的问题是它们现在每次都是随机出现的。它每次从10个中选择一个,而不是第一个10和下一个9。我似乎找不到如何排除以前的。
thelist = [0]
while i < x
if number in thelist:
>>>repeat<<<
else:
thelist.append (number)
if ( number == x0 ):
>>>something<<<
elif ( number == x1 ):
>>>something<<<这就是我想象的代码应该是什么样子,每次你循环时,一个数字被附加到列表中,所以每次它选择一个已经在列表中的数字时,它会再次重复循环,直到它使用了random.randint可以提取的所有数字。
发布于 2012-10-31 13:36:53
下面是一个混洗函数:
import random
max = 15
x = list(range(max+1))
for i in range(max, 0, -1):
n = random.randint(0, i)
x[n], x[i] = x[i], x[n]这从一个排序的数字列表[0, 1, ... max]开始。
然后,它从索引0到索引max中选择一个数字,并将其与索引max互换。
然后,它从索引0到索引max-1中选择一个数字,并将其与索引max-1交换。
依此类推,对于max-2,max-3,... 1
正如yosukesabai正确指出的那样,这与调用random.sample(range(max+1), max+1)具有相同的效果。这将从range(max+1)中选取max + 1唯一的随机值。换句话说,它只是打乱了顺序。文档:http://docs.python.org/2/library/random.html#random.sample
如果你想要更多关于你提出的算法的东西,你可以这样做:
import random
max = 15
x = range(max+1)
l = []
for _ in range(max+1):
n = random.randint(0,max)
while n in l:
n = random.randint(0,max)
l.append(n)发布于 2012-10-31 14:07:54
根据我对您的描述和示例代码的理解,您希望thelist以随机顺序结束于x0和xn之间的每个整数。如果是这样的话,您可以使用random.shuffle()非常简单地实现这一点,它会在适当的位置洗牌列表:
import random
x0 = 5
xn = 15
full_range = list(range(x0, xn))
print(full_range)
random.shuffle(full_range)
print(full_range)https://stackoverflow.com/questions/13151690
复制相似问题