2012-10-31 85 views
2

我正在使用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

你可能会寻找random.sample()? – yosukesabai

回答

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到索引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) 
+0

我认为'x [n],x [i] = x [i],x [n]'比使用'temp'交换更好 –

+0

@ragsagar true,我会更改我的代码。我经常忘记python的元组解包功能。 – Ord

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)