如何在 python 中添加两个索引数量相同的列表

How to add two lists with the same amount of index's in python

我对编码还是个新手,所以对于这个基本问题我深表歉意。如何添加到两个单独列表的元素?

listOne = [0, 1 , 7, 8]
listTwo = [3, 4, 5, 6]
listThree = []

for i in listOne:
    listAdd = (listOne[i] + listTwo[i])
    listThree.append(listAdd)
print(listThree)

我希望输出为 [3, 5, 12, 14] 但我一直收到语法错误

TypeError: List indices must be integers, not strings. 

我认为这可能与 i 可能是一个字符串有关,所以我将 int(i) 作为 for 循环之后的第一行,但这没有帮助。

print np.array(list1) + np.array(list2)

就这些了。

您可以使用zip()功能。将 + 更改为您想要的任何操作。

listOne = [0, 1 , 7, 8]
listTwo = [3, 4, 5, 6]

l = [x + y for x, y in zip(listOne, listTwo)]

print(l)

[3, 5, 12, 14]

我不知道为什么会出现您发布的错误。其余代码在哪里? listThree是在哪里初始化的?

您犯的错误是您正在遍历列表元素,但随后您的行为就好像您正在遍历索引一样。例如,没有 listOne[8]。您似乎想做的是:

listThree = []
for i in range(len(listOne)):
    listThree.append(listOne[i] + listTwo[i])
print(listThree)

不过更好的办法是避免所有的 for-append 并使用列表理解。

listThree = [ listOne[i]+listTwo[i] for i in range(len(listOne)) ]
print(listThree)

您需要在 for 循环之外创建 listThree。

listOne = [0, 1, 7, 8]

listTwo = [3, 4, 5, 6]

listThree = []

我在 listOne 中:

listAdd = (listOne[i] + listTwo[i])

listThree.append(listAdd)

打印(listThree)

就是这样。编码很容易学习向计算机解释你自己如何向自己解释它。快乐编码:-)

您可以将 mapoperator 模块中的 add 函数一起使用:

>>> from operator import add
>>> listOne = [0, 1 , 7, 8]
>>> listTwo = [3, 4, 5, 6]
>>> map(add, listOne, listTwo)
[3, 5, 12, 14]

我不确定您为什么会收到该特定错误。你实际上应该得到索引超出范围的异常。这就是我将您的代码粘贴到我的解释器中时得到的结果。原因是这样的。 当你说

for i in listOne:
   listAdd = (listOne[i] + listTwo[i])
   listThree.append(listAdd)

i 实际上等于每次迭代时列表中项目的值,因此 0 然后 1,然后 7,然后 8。因此,当您尝试使用 i 作为索引访问 listOne 和 listTwo 的元素时, 当 i 大于列表中最后一项的位置时,它将失败。

有很多方法可以完成您想要的。你可以这样做

for i in range(4):
   listAdd.append(listOne[i] + listTwo[i])

你也可以这样做

for x,y in zip(listOne, listTwo)
   listAdd.append(x+y)

这些是一些最类似循环的方法。 leb 和 Donald 展示了上面的列表推导式,Dan 展示了 map。

你错了两件事

  1. 您在 for
  2. 中使用了 listOne 的元素
  3. 您不能在 for 范围之外创建变量。

看似难,其实很简单

listOne = [0, 1, 7, 8]
listTwo = [3, 4, 5, 6]

for i in listOne:
    listAdd = (listOne[i] + listTwo[i])
    listThree.append(listAdd)
print(listThree)

看看你的 for,"i" 变量它假设这个值: 0, 1, 7, 8

那是因为你使用了 "i in listOne",所以,"i" 它假定了 listOne 的值。

正确的做法是:

listOne = [0, 1, 7, 8]
listTwo = [3, 4, 5, 6]

for i in range(len(listOne)):
    listAdd = (listOne[i] + listTwo[i])
    listThree.append(listAdd)
print(listThree)

现在 "i" 将采用以下值:“0、1、2、3”,因为现在您在 for 中使用了 listOne 的长度。

但是还有一件事。这有点困难,但你需要知道。

当您在代码块内(在 if、while、for... 内)声明一个变量时,当程序离开该块时它就死掉了。例如:

x = 30
if x is 30:
   stringInsideIf = "Hello World"
print(stringInsideIf)

在这个例子中,你会收到错误,因为"stringInsideIf"它没有在 if 块之外声明。

因此,您需要在 for 块之外声明 "listThree" 作为一个新列表,如下所示

listThree = []

我认为它会解决问题

并且不要害怕问基本问题,没有人天生就是程序员

同意其他人的看法,认为有更好的方法(列表理解、内置库等),但这里是最低限度地修复代码的方法:

for i in range(len(listOne)):
    listAdd = (listOne[i] + listTwo[i])
    listThree.append(listAdd)

关键是您正在尝试遍历列表 indices,而不是它的值(这是您从 "for i in listOne:" 获得的值)。

len(listOne) 给出列表的长度(此处:4)

范围(4) -> (0, 1, 2, 3)

for i in listOne -->这里我代表列表的元素而不是索引

listOne = [0, 1 , 7, 8]
listTwo = [3, 4, 5, 6]
listThree = []

for i in range(len(listOne)):
    listAdd = (listOne[i] + listTwo[i])
    listThree.append(listAdd)
print(listThree)

以上代码可以正常工作。