有条件替换与列表2元素列表1元素

问题描述:

我试图合并两个列表,但是我正在一个out-of-range错误:有条件替换与列表2元素列表1元素

例子:

List1 = [1,2,0,7,0] 
List2 = [3,6] 

For i in range(len(List1)): 
    if List1[i] == 0: 
     List1[i] = List2[i] 
     print(List1) 

有什么不对的代码?

+0

您告诉我们。它应该做什么?它做什么呢?现在有一个语法错误。确保你剪切并粘贴给出错误的确切代码。 –

要更换的List1是零,随着List2元素的每一个元素,

代码:

List1 = [1, 2, 0, 7, 0] 
List2 = [3, 6] 

l2 = iter(List2) 
List1 = [l if l != 0 else next(l2) for l in List1] 

print(List1) 

产地:从意见

[1, 2, 3, 7, 6] 

更新:

如果List2可能是不够长,围绕这一方法是为next()指定一个默认值:

List1 = [1, 2, 0, 7, 0, 0] 
List2 = [3, 6] 

l2 = iter(List2) 
List1 = [l if l != 0 else next(l2, None) for l in List1] 

print(List1) 

主要生产:

[1, 2, 3, 7, 6, None] 
+0

如果'List1'比'len(List2)'更多'0',你会得到一个'StopIteration'异常,可能需要'next(l0,2)'或'next(l2,None)'来处理。 –

+0

它的工作谢谢,我只是添加下一个(l2,无)斯蒂芬劳赫先生给出的代码 – lecteur

您似乎想要将0的每个实例从List1替换为与索引匹配的值List2。但问题是,对于List10是在指数2(索引从0开始),但就是没有项目在索引2 List2,因此原因,你得到一个IndexError

# Example 
>>> lst = [1, 2, 3] 
>>> lst[2] 
3 
>>> lst[3] 
# IndexError: list index out of range 

这也解释了什么是错的,现在你想要做什么,或许我们可以提供帮助。