我有一个固定的对象列表(几乎它实际上来自一个数据库),我希望能够一次选择一个元素,并且在执行所有元素集之前从不选择之前看过的元素 知道怎么做吗?
它与得到一个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 :(得分: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)
答案 1 :(得分:0)
这似乎有效
import random
def f(n):
random.seed(n)
return random.randint(0, 100)
可能不适合建模或统计分析 - 但它是随机的,它基于以前的数字。