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

时间:2015-07-08 20:25:22

标签: python if-statement for-loop range

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

不幸的是,这似乎有点普遍,但我只是迷失了...... 代码似乎有效,但它一直给我一个索引错误。

2 个答案:

答案 0 :(得分:2)

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

从您的范围中移除+1

for item in range(len_of_firstlist):

您可以使用range()生成索引来访问该值,而不是使用enumerate();使用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])

答案 1 :(得分:0)

我认为你不清楚其中的一些观点:

  • 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