1
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,结果会不会不一样?

4

3 回答 3

6

因为forPython 中的循环实际上是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')]。更多的输入参数意味着输出元组中的更多元素。

于 2013-09-30T17:38:03.287 回答
0

仅对迭代器使用 len(list1) 只会给出一个值 - 列表的长度。如果要遍历每个列表中的整个值集,则需要创建所有索引的范围 - 使用 range() 运算符。

于 2013-09-30T17:38:54.767 回答
0

实际上,您既不需要range也不需要for-loop。您的问题是一个简单的列表理解:

[sum(t) for t in zip(list1,list2)]

以我个人的经验和意见,在大多数情况下,当您看到range(len(x))设计时,会出现问题。

于 2013-09-30T17:41:43.843 回答