【问题标题】:How do I select a random integer from list, different from previous? [duplicate]如何从列表中选择一个与以前不同的随机整数? [复制]
【发布时间】:2016-07-29 10:10:57
【问题描述】:

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

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

我想从中选择随机整数:

item = random.choice(list)

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

【问题讨论】:

  • 您可以使用random.sample()。看到这个link
  • 在编写解决方案时问题被关闭,这有点烦人。如果您仍然需要,我已经在这里发布了答案:repl.it/ChS5

标签: python list python-3.x


【解决方案1】:

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

【讨论】:

  • 对不起,我说得不好,但我需要每次都不同,而不仅仅是与上一个项目不同
  • @mahifoo:我明白了。如果列表中的项目用完了怎么办?
  • @Lynn 该列表有很多项目,我只需要其中的几个。它不会用完
  • ramdom.sample() 效果很好,谢谢
【解决方案2】:

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

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)
...

【讨论】:

    【解决方案3】:

    创建一个检查先前生成的选择的生成器:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2019-08-08
      • 1970-01-01
      • 2022-01-24
      • 2021-07-06
      • 1970-01-01
      相关资源
      最近更新 更多