从一组整数中随机抽样

时间:2012-10-31 05:19:17

标签: python list if-statement random

我正在使用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可以拉的数字。

2 个答案:

答案 0 :(得分:3)

这是一个随机播放功能:

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到索引最大值选择一个数字,然后用索引最大值

交换它

然后,它从索引0到索引max-1选择一个数字,并用索引max-1交换它。

依此类推,对于max-2,max-3,...... 1

正如yosukesabai正确指出的那样,这与调用random.sample(range(max+1), max+1)具有相同的效果。这会从max + 1中选择range(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)

答案 1 :(得分:1)

根据我对您的说明和示例代码的理解,您希望thelist以随机顺序结束x0xn之间的每个整数。如果是这样,您可以使用random.shuffle()非常简单地实现这一点,这会对列表进行随机播放:

import random

x0 = 5
xn = 15

full_range = list(range(x0, xn))
print(full_range)
random.shuffle(full_range)
print(full_range)