我有两个列表,我想结合列表理解,但一直得到一个IndexError: List index out of range
错误:
List1 = [[u'Case1', u'DP1', u'Configuration1', u'New'], [u'Case2', u'DP2', u'Configuration2', u'New']]
List2 = [[u'DP1', u'EB1', u'Typ1'], [u'DP2', u'EB2', u'Type2'], [u'DP3', u'EB3', u'Type2']]
for key, item in enumerate(List2):
List2[key] = [item[0],[x for x in List1 if (x[1] == item[0] and x[2] == 'Configuration1')][0][3]]
print List2
我试图添加else None
,但是得到了一个SyntaxError: invalid syntax
异常:
我的预期产出是:
[[u'DP1', u'New'], [u'DP2', None], [u'DP3',None]]
您在
List1
中的第二个列表在索引2中没有值'Configuration1'
,因此列表理解是空的。索引空列表会产生索引错误:更改后的语法无效;不能在列表理解
^{pr2}$if
筛选器中使用else
:这是因为
if
部分是不是一个条件表达式,而是列表理解语法的一部分。if
测试过滤元素。您可以在列表理解的左侧表达式中使用条件表达式,但在这里这样做没有意义。在如果要查找匹配的数据,应将
List1
转换为字典:这将索引1和索引2处的项映射到索引3处的元素,这样您就可以简单地使用字典查找来填充
List2
的新列表对象:此列表理解的效果与使用enumerate处理
for
循环的效果相同;生成一个具有匹配配置数据的新列表:列表理解的if语法不允许使用“else”。 此列表理解将生成您期望的输出:
我只是将if..else交换到列表理解的前面,并将
None
更改为一个列表,这样当您用[3]
索引它时,它不会抛出错误。在相关问题 更多 >
编程相关推荐