2012-10-31 86 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)