Python 为什么这会给我超出范围(lst3.append(lst4[j])?

Python 为什么这会给我超出范围(lst3.append(lst4[j])?,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,此程序通过交错两个列表的项目来合并它们,但是如果一个列表大于另一个,则较大列表的其余项目应逐项添加到合并列表(lst3),而不是作为列表 我在这一行得到了超出范围的索引:lst3.append(lst4[j]) 我非常感谢任何有助于改进代码和解决问题的建议。 提前感谢您。Pythonlists是零索引的。由于由len()确定的长度是一个索引,因此列表不包含索引等于其长度的元素。因此,进入len(lst1)的lst1片将失败。如果要一直到lst1的末尾,只需使用lst1[len(lst2):]忽略

此程序通过交错两个列表的项目来合并它们,但是如果一个列表大于另一个,则较大列表的其余项目应逐项添加到合并列表(lst3),而不是作为列表

我在这一行得到了超出范围的索引:lst3.append(lst4[j])

我非常感谢任何有助于改进代码和解决问题的建议。
提前感谢您。

Python
list
s是零索引的。由于由
len()
确定的长度是一个索引,因此
列表
不包含索引等于其长度的元素。因此,进入
len(lst1)
lst1
片将失败。如果要一直到
lst1
的末尾,只需使用
lst1[len(lst2):]
忽略切片的末尾即可

但是,使用
zip()
,您可以更轻松地完成任务,这将允许您交错项目,然后将剩余的片段(如果需要)添加到结果中:

def mergeList(lst1,lst2):
lst3=[]
lst4=[]
if len(lst1)>len(lst2):
    for i in range(len(lst2)):

        lst3.append(lst1[i])
        lst3.append(lst2[i])
    lst4=lst1[len(lst2):len(lst1)] #here is python giving an error 
    for j in lst4:
        lst3.append(lst4[j])
else:
    for i in range(len(lst1)):

        lst3.append(lst1[i])
        lst3.append(lst2[i])
    lst4=lst2[len(lst1):len(lst2)]
    for j in lst4:
        lst3.append(lst4[j]) 
return lst3

我还要注意,稍后在OP的循环中,对lst4中的j说
。。。lst4[j]
几乎肯定会导致索引错误,即使没有,这也不是他们想要实现的。@AndrasDeak-是的,他们需要
append(j)
。我认为最好是回答眼前的问题,然后产生一个干净的解决方案,而不是检查所有的错误。我普遍同意,但这种错误可能很快会再次咬到OP的屁股:)我认为你应该在lst4上循环时使用范围,或者你应该附加J本身,因为当你在lst4中执行j时,你得到的是列表中的条目,而不是列表中的第一个索引,所以你要么直接附加它,要么使用一个范围来获得lst4中的第一个索引,希望这能让事情变得清楚。
def mergeList(lst1,lst2):
    lst3 = [item for t in zip(lst1, lst2) for item in t]
    if len(lst2) > len(lst1):
        lst3 += lst2[len(lst1):]
    if len(lst1) > len(lst2):
        lst3 += lst1[len(lst2):]
    return lst3