我能够使用 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。

芜湖不芜
TA贡献1796条经验 获得超7个赞
使用random.choices
:
from random import choices rand_list = choices(range(1,6),k=100)
这k
是随机数的数量。

饮歌长啸
TA贡献1951条经验 获得超3个赞
random.choices
正是您所需要的:
from random import choices rand_list = choices(range(1, 6), k=100)

慕虎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)
添加回答
举报
0/150
提交
取消