簡體   English   中英

生成帶替換的隨機整數列表的最佳方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM