2017-01-01 28 views
-2

我有一個固定的對象列表(幾乎它實際上來自一個數據庫),我希望能夠一次選擇一個元素,而不是選擇一個以前看過之前做過的所有元素 任何想法該怎麼做?如何獲得知道前一個的下一個隨機元素

它與獲取randint(0,N)但知道最後一個選擇有關。我可以強迫種子嗎?


編輯

我本來應該更加明確。對不起。 當我對我的視圖/函數發出請求時,我每次只得到一個元素。

在下一個請求我只想通過最後一個我作爲參數,並從同一個列表中隨機獲取另一個。但是由於python使用某種線性同餘發生器(u_1 = f(u_0)),我希望能夠用我以前的值對它進行播種,以獲得下一個。它並不需要是statistaclly完美的,但大致隨機

def f(old = None): 
    l = range(100) 
    some_number = ??(l, old) 
    return some_number 
+0

如果您想要選擇而不更換,請從集合中刪除所選的所有元素。 – TigerhawkT3

+0

你的編輯沒有意義。所以基本上它可以選擇1然後2,然後1,然後2 ...只有一個不深入的記憶。 –

+0

我試圖在編輯時考慮到新請求,但我不確定現在究竟是什麼。 – roganjosh

回答

3

最簡單的方法是簡單地你的對象的名單上使用random.shuffle()然後通過該列表進行迭代。

import random 

lst = [1, 2, 3, 4] 

random.shuffle(lst) 
print lst 

如果您不想修改列表本身,請創建一個索引列表。

import random 

indices = range(len(lst)) 

lst = [1, 2, 3, 4] 

random.shuffle(indices) 

for index in indices: 
    print lst[index] 

編輯

現在的問題是改變了,我想你可以利用這個原理遠一點用於這一目的。只需重建可用索引的列表。

def return_random(indices, last_chosen): 
    remaining_indices = [index for index in indices if index != last_chosen] 
    return random.choice(remaining_indices) 
0

這似乎是工作

import random 
    def f(n): 
     random.seed(n) 
     return random.randint(0, 100) 

可能不利於建模和統計分析 - 但它是隨機的,它是基於以前的號碼。

+0

Thx亞歷克斯,簡單,我需要什麼。我不需要任何統計屬性,但作爲一個純函數 – Dave

+1

不幸的是經過測試,它不起作用 – Dave

+0

是的,它似乎不適用於小的種子數量。基於random.shuffle的東西應該更好。 –