第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

優(yōu)化 Python 中不包括值列表的數(shù)字的隨機化

優(yōu)化 Python 中不包括值列表的數(shù)字的隨機化

富國滬深 2023-09-12 16:33:15
我需要生成一個介于最小值和最大值之間的隨機數(shù)。這個數(shù)字應(yīng)該是10的倍數(shù)。這是我得出的解決方案。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有沒有辦法使用列表列表理解或其他方式獲得相同的結(jié)果?
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

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


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返回有效數(shù)字集中的選項列表。因此您可以輕松修改以獲得單一號碼。


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


查看完整回答
反對 回復(fù) 2023-09-12
  • 1 回答
  • 0 關(guān)注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號