[英]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)
我相信您需要使用隨機包中的功能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)
你可以使用理解
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)
使用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)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.