def sum_items(list1, list2):
sum_list = []
for i in range(len(list1)):
sum_list.append(list1[i] + list2[i])
return sum_list
为什么需要这样的范围功能?如果我们只使用list1的len?结果不一样吗?
答案 0 :(得分:6)
因为Python中的for
循环实际上是for each loop;你需要给它一个 iterable 来循环;你没有循环一定数量的迭代,你在迭代元素,一个接一个元素。
如果你试图循环只是长度,你会得到一个例外:
>>> for i in 42:
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
对于特定示例,您也不需要使用range()
,而是使用zip()
function代替:
def sum_items(list1, list2):
sum_list = []
for i, j in zip(list1, list2)
sum_list.append(i + j)
return sum_list
或者与列表理解相结合:
def sum_items(list1, list2):
return [i + j for i, j in zip(list1, list2)]
或使用sum()
在每个压缩元组中汇总所有值:
def sum_items(list1, list2):
return [sum(t) for t in zip(list1, list2)]
zip()
从每个参数iterables中获取元素,并逐个配对元素; [1, 2, 3]
和['foo', 'bar', 'baz']
变为[(1, 'foo'), (2, 'bar'), (3, 'baz')]
。更多输入参数意味着输出元组中有更多元素。
答案 1 :(得分:0)
只为你的迭代器使用len(list1)只给出一个值 - 列表的长度。如果要迭代每个列表中的整个值集,则需要使用range()运算符创建所有索引的范围。
答案 2 :(得分:0)
实际上,您既不需要range
也不需要for
- 循环。你的问题很简单:
[sum(t) for t in zip(list1,list2)]
根据我的个人经验和意见,在大多数情况下,当您看到range(len(x))
时,设计出现了问题。