需要for循环中的范围

时间:2013-09-30 17:36:08

标签: python for-loop

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?结果不一样吗?

3 个答案:

答案 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))时,设计出现了问题。