【问题标题】:How to create a random list with only unique values? [duplicate]如何创建一个只有唯一值的随机列表? [复制]
【发布时间】:2018-04-08 17:49:10
【问题描述】:

我想创建一个包含 100 个元素的随机列表。到目前为止,一切都很好......

示例 1: 工作正常,因为函数的范围足够大,不会重复任何值

list = random.sample(range(1,200),100)

示例2:不起作用,因为范围太小(样本大于总体)

list = random.sample(range(50,80),100)

我正在寻找一种方法来创建具有比范围更多的值的随机列表,并且元素存在多次是没有问题的。

【问题讨论】:

  • 对于 Python 3.6 或更高版本:random.choices(range(50, 80), k=100).

标签: python list random


【解决方案1】:

在这种情况下,不要使用random.sample,而是从一个范围内选择的元素构建列表:

import random

[random.randrange(50, 80) for _ in range(100)]

示例输出:

[57,
 52,
 59,
 67,
 52,    # some elements repeat
 64,
 75,
...

【讨论】:

【解决方案2】:

使用numpy random:

import numpy as np
np.random.randint(low=3,high=12,size=100)

【讨论】:

    【解决方案3】:

    看看numpy.choice

    import numpy as np
    l = range(50,80)
    np.random.choice(l, 100, True)
    

    【讨论】:

    • 这个解决方案也不错!但它创建了一个 ndarray.... 但它很容易转换为列表。 Reblochon Masque 的解决方案更加紧凑。
    【解决方案4】:

    使用list comprehension + randint

    [random.randint(1,200) for _ in range(100)]
    

    看到正在重复的元素计数不是100

    In [6]: len(set([random.randint(1,200) for _ in range(100)]))
    Out[6]: 76
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      相关资源
      最近更新 更多