python - 创建除数字典
问题描述
我正在尝试制作一个带有三个参数的函数:(divisors
列表)lower
、 和upper
, where upper >= lower
。我希望该函数返回一个字典,其中键是除数,其值是可被相应除数整除的范围(下限和上限)之间的数字列表。
这是我的初步尝试:
def create_divisors_dict(divisors, lower, upper):
list = []
dict = {}
for i in range(len(divisors)):
for j in range(lower, upper + 1):
if j % divisors[i] == 0:
list.append(j)
dict[i] = list
else:
dict[i] = []
return dict
print(create_divisors_dict([1, 2, 5], 2, 4))
预期的输出是:
{1: [2, 3, 4], 2: [2, 4], 5: []}
但是,我不断得到一些奇怪的输出,这是我用上面显示的代码得到的最接近的输出:
{1: [2, 3, 4, 2, 4], 2: [2, 3, 4, 2, 4], 5: []}
有人可以帮助我并告诉我问题出在哪里或我做错了什么吗?
解决方案
@Carci 已经解释了您的一个错误,另一个是您dict[i] = []
无缘无故地重置,第三个是您不使用除数,而是使用它们的索引作为结果键(如果您进行正常迭代,则不会发生除数)。
无论如何,这是一个简短而有效的解决方案:
def create_divisors_dict(divisors, lower, upper):
return {d: [*range(lower + -lower % d, upper + 1, d)]
for d in divisors}
或者对范围内的第一个倍数使用不同的表达式:
def create_divisors_dict(divisors, lower, upper):
return {d: [*range(-(-lower // d) * d, upper + 1, d)]
for d in divisors}
推荐阅读
- python - Python new columns from multi groupby
- c++ - 如何使用 C++ 在 Winsock 中将大字符串从客户端发送到服务器
- jenkins - 如何保持 terraform 的 remote-exec shell 持久化?
- c# - WPF - 将 XAML 内容导出到文件(PDF 或 Word)
- excel - 在 VBA 中具有声明值的 Excel IF 函数
- android - 如何使注册电池广播在清单中而不是在活动中工作
- stored-procedures - 无法使用存储过程查询 Azure Cosmosdb
- git - Git-gui 查看差异时显示行号
- excel - 防止列表框中重复的问题
- django - 如何获取在 HTML 页面中上传的图像,在 Django 中