亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

優化 Python 中不包括值列表的數字的隨機化

優化 Python 中不包括值列表的數字的隨機化

富國滬深 2023-09-12 16:33:15
我需要生成一個介于最小值和最大值之間的隨機數。這個數字應該是10的倍數。這是我得出的解決方案。import randomBLOCK = 10def random_excluding_values(_min, _max, exclude_list):while True:    random_number = round(random.randrange(_min, _max - BLOCK) / BLOCK) * BLOCK    if random_number not in exclude_list:        return random_number有沒有辦法使用列表列表理解或其他方式獲得相同的結果?
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

計算時下限包括 10 的倍數range。跳過 while 循環可確保您不會陷入無限循環。轉換為集合可確保您知道可以獲得什么。


import random


def random_excluding_values(_min, _max, exclude_list, num_of_elems):

    lower_bound = round(_min+4, -1)    

    all_nums = {num for num in range(lower_bound, _max+1, 10)}


    exclude_set = set(exclude_list)

    valid_choices = all_nums - exclude_set

    

    return random.sample(valid_choices, num_of_elems)



_min = 9

_max = 103

exclude_list = [40,50,60,70]

#valid_list = [10,20,30,80,90,100]

num_elems = 3 


for i in range(5):

    print(f'run = {i}; result = {random_excluding_values(_min, _max, exclude_list, num_elems)}')

輸出:


run = 0; result = [80, 30, 20]

run = 1; result = [10, 20, 80]

run = 2; result = [10, 80, 30]

run = 3; result = [100, 90, 10]

run = 4; result = [10, 20, 100]

random.sample返回有效數字集中的選項列表。因此您可以輕松修改以獲得單一號碼。


return random.sample(valid_choices, 1)[0]


查看完整回答
反對 回復 2023-09-12
  • 1 回答
  • 0 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號