为了账号安全,请及时绑定邮箱和手机立即绑定

生成带替换的随机整数列表的最佳方法

生成带替换的随机整数列表的最佳方法

慕码人2483693 2023-12-12 15:07:23
我能够使用 for 循环生成带有替换的随机整数列表,但它看起来很冗长,并且必须有一种更优雅的方法来使用纯 python 或不使用random循环来执行此操作。是否有更优化的解决方案可以产生rand_list以下结果,而无需在每个循环上附加?import randomrand_list = [] for x in range(100):    r = random.choice([1,2,3,4,5])    rand_list.append(r)
查看完整描述

5 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

我相信您需要使用随机包中的函数choices,您只是缺少“s”!此外,您还需要添加k参数来说明您想要采样多少个值:

values = [1,2,3,4,5]
print(random.choices(values,k=10))

输出:

[2, 1, 4, 2, 2, 4, 1, 2, 1, 4]

在您的示例中,您需要将 k 固定为 100。


查看完整回答
反对 回复 2023-12-12
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

使用random.choices

from random import choices

rand_list = choices(range(1,6),k=100)

k是随机数的数量。


查看完整回答
反对 回复 2023-12-12
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

random.choices正是您所需要的:

from random import choices

rand_list = choices(range(1, 6), k=100)


查看完整回答
反对 回复 2023-12-12
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

print(list(random.choices([1, 2, 3, 4, 5], k=100)))



查看完整回答
反对 回复 2023-12-12
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你可以使用理解

rand_list = [(random.randrange(5) + 1) for x in range(100)]

如果您有较重的函数(可能是复杂的哈希或返回极大的值),则可以使用生成器延迟值的创建。这可以节省内存并允许在创建整个列表之前进行处理。您可以在对值进行计数后中断,或者如果只需要特定数量(而不是连续过程),则可以迭代其中的一部分。

import itertools

import random


def gen():

    while True:

        yield random.randrange(5) + 1


max_iterations = 100


for value in itertools.islice(gen(), max_iterations):

    do_some_opertation(value)


查看完整回答
反对 回复 2023-12-12
  • 5 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信