生成带有替换的随机整数列表的最佳方法
Best way to generate list of random integers with replacement
我能够生成一个随机整数列表,并使用 for 循环进行替换,但它看起来很冗长,必须有一种更优雅的方法来使用纯 python 或使用 random
没有循环。是否有更优化的解决方案可以产生下面的结果 rand_list
而无需在每个循环中附加?
import random
rand_list = []
for x in range(100):
r = random.choice([1,2,3,4,5])
rand_list.append(r)
您可以使用 comprehension
rand_list = [(random.randrange(5) + 1) for x in range(100)]
如果您有更重的函数(可能是复杂的散列或 return 非常大的值),您可以使用生成器延迟创建值。这可以节省内存并允许在创建整个列表之前进行处理。您可以在计算值后中断,或者 如果只需要一定数量(而不是连续过程)。
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)
我相信您需要使用随机包中的函数 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。
random.choices
正是您所需要的:
from random import choices
rand_list = choices(range(1, 6), k=100)
使用random.choices
:
from random import choices
rand_list = choices(range(1,6),k=100)
这里k
是随机数的个数
print(list(random.choices([1, 2, 3, 4, 5], k=100)))
我能够生成一个随机整数列表,并使用 for 循环进行替换,但它看起来很冗长,必须有一种更优雅的方法来使用纯 python 或使用 random
没有循环。是否有更优化的解决方案可以产生下面的结果 rand_list
而无需在每个循环中附加?
import random
rand_list = []
for x in range(100):
r = random.choice([1,2,3,4,5])
rand_list.append(r)
您可以使用 comprehension
rand_list = [(random.randrange(5) + 1) for x in range(100)]
如果您有更重的函数(可能是复杂的散列或 return 非常大的值),您可以使用生成器延迟创建值。这可以节省内存并允许在创建整个列表之前进行处理。您可以在计算值后中断,或者
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)
我相信您需要使用随机包中的函数 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。
random.choices
正是您所需要的:
from random import choices
rand_list = choices(range(1, 6), k=100)
使用random.choices
:
from random import choices
rand_list = choices(range(1,6),k=100)
这里k
是随机数的个数
print(list(random.choices([1, 2, 3, 4, 5], k=100)))