如何知道前一个随机元素

时间:2017-01-01 14:32:58

标签: python django django-models

我有一个固定的对象列表(几乎它实际上来自一个数据库),我希望能够一次选择一个元素,并且在执行所有元素集之前从不选择之前看过的元素 知道怎么做吗?

它与得到一个randint(0,N)但知道最后一个选择有关。我可以强迫种子吗?

修改

我应该更明确。对不起。 当我向我的视图/功能发出请求时,我每次只获得一个元素。

在下一个请求中,我想只传递我作为参数获得的最后一个,并从同一列表中随机获取另一个。但是由于python正在使用某种线性同余生成器(u_1 = f(u_0)),我希望能够用我的旧值来播种它以获得下一个。它不需要完美的statistaclly,但大致是随机的

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

2 个答案:

答案 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)

可能不适合建模或统计分析 - 但它是随机的,它基于以前的数字。