在python中,如何在不改变子列表顺序的情况下合并列表列表?

在python中,如何在不改变子列表顺序的情况下合并列表列表?,python,list,merge,Python,List,Merge,例如,合并列表列表 list_of_lists = [['NA','NA','NA','0,678'], ['0.327','NA','NA','NA'], ...] 我想要 merged = ['0.327','NA','NA','0,678'] 请发表评论。使用带有嵌套生成器表达式的列表理解来选择第一个非NA元素以及zip(): 演示: 下一个(…),默认值)调用表达式将选择不等于'NA'的第一个元素,如果不存在这样的元素,则返回到'NA'。假设两个列表的值不在同一位置(如Martijn

例如,合并列表列表

list_of_lists = [['NA','NA','NA','0,678'], ['0.327','NA','NA','NA'], ...]
我想要

merged = ['0.327','NA','NA','0,678']

请发表评论。

使用带有嵌套生成器表达式的列表理解来选择第一个非
NA
元素以及
zip()

演示:


下一个(…),默认值)
调用表达式将选择不等于
'NA'
的第一个元素,如果不存在这样的元素,则返回到
'NA'

假设两个列表的值不在同一位置(如Martijn Pieters所建议的),则可以使用:

for i in range(len(l1)): 
    l1[i] = l2[i] if l1[i] == 'NA' and l2[i] != 'NA' else l1[i]

希望这有帮助

如果两个列表都有值怎么办!=<代码>'NA'?我在我的数据中没有看到任何这样的情况,在这里的示例数据中没有。但是这种可能性永远不会出现在您的实际用例中?我确信它不会出现在我的数据中,但是可以有多个列表,并且它们都可以是列表格式的列表,例如['NA'、'NA'、'0678']、['0.327'、'NA'、'NA'、'NA'],…等等]
>>> list_of_lists = [['NA','NA','NA','0,678'], ['0.327','NA','NA','NA']]
>>> from itertools import ifilter # Py3k doesn't need import, use filter built-in
>>> [next(ifilter('NA'.__ne__, col), 'NA') for col in zip(*list_of_lists)]
['0.327', 'NA', 'NA', '0,678']
for i in range(len(l1)): 
    l1[i] = l2[i] if l1[i] == 'NA' and l2[i] != 'NA' else l1[i]
>>> list_of_lists = [['NA','NA','NA','0,678'], ['0.327','NA','NA','NA']]
>>> from itertools import ifilter # Py3k doesn't need import, use filter built-in
>>> [next(ifilter('NA'.__ne__, col), 'NA') for col in zip(*list_of_lists)]
['0.327', 'NA', 'NA', '0,678']