首页 > 解决方案 > 创建除数字典

问题描述

我正在尝试制作一个带有三个参数的函数:(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: []}

有人可以帮助我并告诉我问题出在哪里或我做错了什么吗?

标签: pythondictionary

解决方案


@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}

推荐阅读