慕碼人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。

蕪湖不蕪
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)]
如果您有較重的函數(可能是復雜的哈?;蚍祷貥O大的值),則可以使用生成器延遲值的創建。這可以節省內存并允許在創建整個列表之前進行處理。您可以在對值進行計數后中斷,或者如果只需要特定數量(而不是連續過程),則可以迭代其中的一部分。
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
提交
取消