循环访问字典问题中的布尔值



我有这样的代码:

def myfun(*args):
return {i: sum(k % i == 0 for k in args) for i in range(1,10)}
myfun(1,2,3,4,4,5,10,16,20)
{1: 9, 2: 6, 3: 1, 4: 4, 5: 3, 6: 0, 7: 0, 8: 1, 9: 0}

我想将其转换为没有字典理解的函数:

def myfun(*args):
for item in args:
for item_2 in range(1,10):
return {item_2:sum(item % item_2 == 0)}
myfun(1,2,3,4,4,5,10,16,20)

但我得到:

----> 4             return {item_2:sum(item % item_2 == 0)}
5 
6 myfun(1,2,3,4,4,5,10,16,20)
TypeError: 'bool' object is not iterable

返回的布尔值而不是总和到底是什么?

要解开嵌套字典理解,您最终会得到两个for循环。首先,您将遍历range并将字典条目(您的总和值(初始化为0。然后,您将遍历args并进行模组检查,并在必要时增加值。这将模拟您的sum表达式。

def myfun(*args):
result = {}
for i in range(1,10):
result[i] = 0
for k in args:
if k % i == 0:
result[i] += 1
return result
>>> myfun(1,2,3,4,4,5,10,16,20)
{1: 9, 2: 6, 3: 1, 4: 4, 5: 3, 6: 0, 7: 0, 8: 1, 9: 0}

这是正确的非字典理解语法:

def myfun(*args):
result = {}
for i in range(1,10):
result[i] = sum(k % i == 0 for k in args)
return result
print(myfun(1,2,3,4,4,5,10,16,20))

输出:

{1: 9, 2: 6, 3: 1, 4: 4, 5: 3, 6: 0, 7: 0, 8: 1, 9: 0}

最新更新