用于在列表中添加元素的功能

时间:2015-11-12 22:20:20

标签: python python-3.x

我正在创建一个程序,在两个单独的列表中添加相同基数的元素:

list1 = [1,2,3]

list2 = [2,3,4]

因此list3将为[3,5,7]

这是我的代码:

def add_list(lst1,lst2):
    sum_lst = []
    index = 0
    while (len(lst1)-1) >= index:
        sum_lst[index] == lst1[index] + lst2[index]
        index += 1
    return sum_lst

运行时我收到此错误“索引超出范围”:

sum_lst[index] == lst1[index] + lst2[index]

考虑到我在超过列表长度之前停止索引,它是如何超出范围的?

4 个答案:

答案 0 :(得分:6)

sum_lst[index] == lst1[index] + lst2[index]
          ^1    ^2

2个主要问题:

  1. 你将sum_lst初始化为' []`这意味着,YES,0 IS超出索引。
  2. ===不同。 ==是一个布尔表达式操作,用于评估相等性,而=是赋值运算符。
  3. 两个修正:

    #replaces that one line
    sum_lst.append(lst1[index]+lst2[index])
    

    OR

    #replaces the whole function
    sum_lst = [x+y for x,y in zip(lst1,lst2)]
    

答案 1 :(得分:3)

您在错误讯息中遇到错误的原因是因为sum_lst还没有您正在寻找的索引。

E.g。如果你试试

>>> some_list = []
>>> some_list[0] = 1 # you'll get
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

相反,尝试类似:

sum_lst.append(lst1[index] + lst2[index])

这将在数组的末尾添加一个新元素

答案 2 :(得分:0)

这条线的问题已经指出:

sum_lst[index] == lst1[index] + lst2[index]

除了此修复程序之外,我将解释您可以采取的一些步骤来改进此代码和类似代码。

通常在Python中使用while循环,而不是递增索引并使用for循环。我们可以使用range函数遍历所有索引。

以下是一项改进(请注意我们在此修复了append==问题):

def add_list(lst1, lst2):
    sum_lst = []
    for index in range(len(lst1)):
        sum_lst.append(lst1[index] + lst2[index])
    return sum_lst

但这仍然不是惯用的。

在检索索引时,使用enumerate函数循环遍历项目会更好。每当您看到类似for i in range(len(lst1))的内容时enumerate

def add_list(lst1, lst2):
    sum_lst = []
    for index, item1 in enumerate(lst1):
        sum_lst.append(item1 + lst2[index])
    return sum_lst

我们需要索引的唯一原因是因为我们试图一次遍历两个列表。每当您需要同时遍历多个列表时,您可以使用zip函数将迭代/列表压缩在一起:

def add_list(lst1, lst2):
    sum_lst = []
    for item1, item2 in zip(lst1, lst2):
        sum_lst.append(item1 + item2)
    return sum_lst

这几乎是我们能做的最好的事情。我们可以做出另外一项改进:使用列表理解而不是for循环:

def add_list(lst1, lst2):
    return [item1 + item2 for item1, item2 in zip(lst1, lst2)]

答案 3 :(得分:-2)

>>> [a+b for a,b in zip(list1,list2)]
[3, 5, 7]

我会说你的代码的主要问题不是bug本身,而是你用传统的程序模式编写。也许你曾经做过Java或C? Python是一种多范式语言,支持函数式编程。主要的好处是你应该尝试保持不可变的内容,因此不是创建空列表并逐渐用内容填充它们,而是尝试动态创建结果列表。如上例所示。这样,您就无法在赋值运算符的任何一侧产生索引错误。

但是,如果你真的想知道,你的错误是双重的:

>>> a = []
>>> a[1] = 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

即。您无法通过分配新元素将内容附加到列表中。你可以这样做:

a += [3]

其次,您使用了比较运算符(==)而不是赋值运算符(=)。