列表索引超出范围:有条件地将信息从两个列表导入一个

List Index Out of Range: Importing info from two lists into one conditionally

a = "alpha"
b = None
c = "charlie"
first_list = [a,b,c]

a_define = "a"
b_define = "b"
c_define = "c"
second_list = [a_define, b_define, c_define]

third_list = []

len_of_firstlist = len(first_list)

for item in range(len_of_firstlist+1):
    if first_list[item] is not None:
        first_list[item] = first_list[item] + second_list[item]
        third_list.append(first_list[item])

print third_list

不幸的是,这似乎有点笼统,但我实在是太迷茫了…… 该代码似乎有效,但它一直给我一个索引错误。

您的索引从 0 一直到 len(first_list),但 first_list 中的最后一个索引是 len(first_list) - 1,因为索引从 0 开始。

从您的范围中删除 +1

for item in range(len_of_firstlist):

您可以使用 enumerate() 生成索引 来访问值,而不是使用 range();使用 zip() 配对两个列表:

for index, (first, second) in enumerate(zip(first_list, second_list)):
    if first is not None:
        first_list[index] = first + second
        third_list.append(first_list[index])

我觉得你对这几点还不清楚:

  • range(start=0,stop,step=1) 函数从默认值 0 开始,当值 等于 时停止,即 stop 值为 包括在内。 有关详细信息,请参阅 docs.
  • Python 中的列表从 0 开始索引(类似于 C 中的数组)。

所以如果你想遍历一个长度为n的字符串,你需要定义你的范围为range(n).

如果您想要更紧凑的代码,可以进行一些更改:

a = "alpha"
b = None
c = "charlie"
first_list = [a,b,c]

a_define = "a"
b_define = "b"
c_define = "c"
second_list = [a_define, b_define, c_define]

third_list = []

for item in xrange(len(first_list)):
    if first_list[item] is not None:
        first_list[item] += second_list[item]
        third_list.append(first_list[item])

print third_list