创建除数字典

艾哈迈德

我正在尝试创建一个带有三个参数的函数:(divisors列表)、lower、 和upper,其中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: []}

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

卡迪亚斯

这只是另一种选择,根据您发布的代码构建:

def create_divisors_dict(divisors, lower, upper):
    d = {}
    for divisor in divisors:
        d[divisor] = []
        for n in range(lower, upper + 1):
            if n % divisor == 0:
                d[divisor].append(n)

    return d

或者使用一些列表理解:

def create_divisors_dict(divisors, lower, upper):
    d = {}
    for divisor in divisors:
        d[divisor] = [n for n in range(lower, upper + 1) if n % divisor == 0]

    return d

甚至结合字典和列表推导式:

def create_divisors_dict(divisors, lower, upper):
    return {d: [n for n in range(lower, upper + 1) if n % d == 0] for d in divisors}

其中任何一个将导致:

print(create_divisors_dict([1, 2, 5], 2, 4))

{1: [2, 3, 4], 2: [2, 4], 5: []}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章