如何从列表中选择一个随机整数,与以前不同?

时间:2016-07-29 10:10:57

标签: python list python-3.x

所以我有一个这样的整数列表:

protected void grid_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
         DataRowView row = (DataRowView)e.Row.DataItem;
         decimal nonvat = (decimal)row["nonvat"];
         e.Row.Cells[0].Text = nonvat.ToString("#,##0.00;(#,##0.00);0}");
    }
}

我想从中选择随机整数:

list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

但是我如何确保下次这样做时,它是不同的项目?我不想从列表中删除项目。

3 个答案:

答案 0 :(得分:2)

如果您希望列表中的 n 不同的随机值,请使用random.sample(list, n)

答案 1 :(得分:1)

如果您无论如何都需要它们,并且只是想以随机顺序(但您不想更改列表),或者您没有想要的项目上限样本(除了列表大小):

import random
def random_order(some_list):
    order = list(range(len(some_list)))
    random.shuffle(order)
    for i in order:
        yield some_list[i]

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for item in random_order(my_list):
    ... # do stuff

或者,您可以像这样使用它:

order = random_order(my_list)
some_item = next(order)
some_item = next(order)
...

答案 2 :(得分:0)

创建一个生成器,用于检查先前生成的选项:

import random
def randomNotPrevious(l):
    prev = None
    while True:
        choice =  random.choice(l)
        if choice != prev:
            prev = choice
            yield choice

>>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> randomLst = randomNotPrevious(l)
>>> next(randomLst)
1
>>> next(randomLst)
5
>>> next(randomLst)
3
>>> next(randomLst)
6
>>> next(randomLst)
5