【问题标题】:Python: how to create a list of lists with increasing length, made of random numbers?Python:如何创建由随机数组成的长度增加的列表列表?
【发布时间】:2017-03-02 18:07:21
【问题描述】:

假设我有一个名为 masterlist 的 200 个正、唯一、随机整数列表。

我想生成一个名为 container 的 10 个列表的列表,这样:l1 有 2 个来自 masterlist 的随机数,不包括重复; l2 有 4 个元素,l3 有 6 个元素,依此类推。

我知道我可以像这样创建我的container 列表:

comb=[[] for i in range(10)]

我可以使用random.choice() 从列表中选择一个随机值。

嵌套这 10 个列表的填充过程的最佳 Pythonic 方法是什么,以便我创建一个列表,附加正确数量的值以检查没有重复,然后继续下一个?

编辑

这是我的尝试:

comb=[[] for i in range(10)]
for j in range(1,11):
    for k in range(0,2*j):
        comb[j][k].append(random.choice(masterlist))

这有什么问题?

【问题讨论】:

  • 每个列表应该包含多少个整数?两个不同的列表可以有两个相同的数字吗?
  • l1 有 2 个值,l2 有 4 个值,l3 有 6 个,一直到 l10 有 20 个。是的,两个不同的列表可以有两个相同的数字。重要的是在每个列表中都没有重复。
  • 2个子列表可以有一个数字吗?
  • 是的,当然可以。

标签: python list random


【解决方案1】:

这应该可以解决问题:

import random

masterlist = [i for i in range(200)]  # For example

container = [
    random.sample(masterlist, l)
    for l in range(2, 21, 2)
]

容器由一个列表推导式组成,使用 range() 调用将变量 l 设置为 2、4、6 ... 18、20。在理解的每个“循环”中,内置的 random.sample() 调用会执行您所追求的无替换采样。

【讨论】:

  • 好吧,花哨的东西,但我收到了一个错误:TypeError: random_sample() takes at most 1 positional argument (2 given)。顺便说一句,感谢您的解释!
  • 在 python 2.7 上为我工作。你用的是什么版本的python?你能发布完整的回溯吗?
  • 另外,random_sample 方法是在哪里定义的?这与我使用的random.sample 方法不同。
  • FWIW,您的masterlist 不会包含唯一随机整数。但这很容易做到,只需在 while 循环中构建一个集合,然后将该集合转换为一个列表。
  • 是的,抱歉,这只是“事物”的示例列表。提问者说他​​们已经有了这份清单。为了清楚起见,我将其更改为一个范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
相关资源
最近更新 更多