如何将两个嵌套列表合并为一对一对应元素的扁平列表?
问题描述
现有两个嵌套列表:
list1 = [[1,2],[3,4]] list2 = [[11,22],[33,44]]
尝试使用以下代码:
output = list(tuple(zip(i, j)) for i, j in zip(list1, list2))
得到的输出为:
[((1, 11), (2, 22)), ((3, 33), (4, 44))]
但期望得到一对一对应元素的扁平列表:
[(1,11),(2,22),(3,33),(4,44)]
请问该如何修正代码?
解决方案
方法1:嵌套列表推导式
直接遍历两层配对结构,把每个元素对直接收集到结果列表中:
list1 = [[1,2],[3,4]] list2 = [[11,22],[33,44]] output = [pair for i, j in zip(list1, list2) for pair in zip(i, j)] print(output) # 输出: [(1, 11), (2, 22), (3, 33), (4, 44)]
这种写法拆解了原代码的嵌套逻辑,先配对两个列表的子列表,再遍历子列表的元素对,直接将每个元素对加入结果,避免生成嵌套结构。
方法2:用itertools.chain扁平化结构
借助itertools.chain工具直接展开嵌套的元素对集合:
from itertools import chain list1 = [[1,2],[3,4]] list2 = [[11,22],[33,44]] output = list(chain.from_iterable(zip(i, j) for i, j in zip(list1, list2))) print(output) # 输出: [(1, 11), (2, 22), (3, 33), (4, 44)]
chain.from_iterable会自动提取传入可迭代对象中的所有元素,将嵌套结构拼接成扁平迭代器,最后转成列表即可得到目标结果。
内容的提问来源于stack exchange,提问作者Asib Ahmed
相关产品推荐
相关产品推荐

