python - 优化数字的随机化,不包括 Python 中的值列表
问题描述
我需要在最小值和最大值之间生成一个随机数。这个数字应该是 10 的倍数。这就是我得出的解决方案。
import random
BLOCK = 10
def 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
有没有一种方法可以使用列表理解或其他方法获得相同的结果?
解决方案
计算时,下限包括 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]
推荐阅读
- firebase - 如何分配uid?
- python - 如果使用 Go 执行 python 脚本,则无法打印中文
- excel - 移动或另存为 .xlsm 文件会破坏宏
- javascript - 如何将“onClick”函数传递给 React 中的子组件
- python - 将不使用某台机器的惩罚成本引入 ORTools Job Shop 问题
- jsonschema - JSON 模式中的常见类型限制
- android - react-native-sqllite 值未显示
- css - 我的工作网站上的 Ghost 主题问题 - 侧边栏不是移动响应的
- javascript - 在JS中获取元素的宽度没有得到宽度的预期结果
- vuejs2 - 如何从 Nuxt 中的 Vuex 中删除 window.__NUXT__ 而不会出现任何问题