def sum_items(list1, list2):
sum_list = []
for i in range(len(list1)):
sum_list.append(list1[i] + list2[i])
return sum_list
为什么这样的事情需要 range 函数?如果我们简单地使用list1的len,结果会不会不一样?
因为for
Python 中的循环实际上是for each 循环;你需要给它一个可迭代的循环;您不是在循环一定次数的迭代,而是在迭代元素,一个又一个元素。
如果你试图只循环长度,你会得到一个例外:
>>> for i in 42:
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
对于您的具体示例,您不需要使用range()
任何一个,我会使用该zip()
函数:
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()
从每个参数迭代中获取元素并将元素一对一配对;[1, 2, 3]
并['foo', 'bar', 'baz']
变成[(1, 'foo'), (2, 'bar'), (3, 'baz')]
。更多的输入参数意味着输出元组中的更多元素。
仅对迭代器使用 len(list1) 只会给出一个值 - 列表的长度。如果要遍历每个列表中的整个值集,则需要创建所有索引的范围 - 使用 range() 运算符。
实际上,您既不需要range
也不需要for
-loop。您的问题是一个简单的列表理解:
[sum(t) for t in zip(list1,list2)]
以我个人的经验和意见,在大多数情况下,当您看到range(len(x))
设计时,会出现问题。