Python如何按对应位置合并两个嵌套列表生成指定结构新列表
Python两个等长列表按对应位置子列表合并实现
原代码错误说明
你写的循环存在两个核心问题:
for i, j in a, b的遍历逻辑不成立,该写法只会先后遍历a、b两个列表整体,不会对两个列表的对应位置元素做配对- 循环中拿到的i、j是列表里的子元素(比如
['bmw']、[12,2]),不是整数索引,无法作为下标调用a[i]、b[j]取值,运行必然报错。
推荐实现方式
方法1:列表推导式+zip(最简洁,生成新列表不修改原数据)
利用zip可以同时遍历多个可迭代对象、自动按位置配对元素的特性,直接拼接对应位置的两个子列表即可:
a = [['bmw'], ['audi'], ['benz'], ['honda']] b = [[12,2], [3,4], [7,5], [6,23]] n = [sub_a + sub_b for sub_a, sub_b in zip(a, b)]
运行后n的输出完全匹配你的预期:
[['bmw', 12, 2], ['audi', 3, 4], ['benz', 7, 5], ['honda', 6, 23]]
该方法不会修改原始列表a、b的内容,适合后续还需要使用原始列表的场景。
方法2:索引遍历(直接修改原列表a)
如果你不需要保留原始a的内容,想直接在a的基础上合并,可以通过索引遍历,用extend批量追加对应元素:
for idx in range(len(a)): a[idx].extend(b[idx])
执行完成后a本身就会变成目标结构的列表。
方法3:逐元素追加(和你最初的append思路最接近)
如果要明确使用append逐元素添加,注意先配对元素,同时避免修改原列表:
n = [] for sub_a, sub_b in zip(a, b): current = sub_a.copy() for val in sub_b: current.append(val) n.append(current)
内容的提问来源于stack exchange,提问作者Ali Zabihi
相关产品推荐
相关产品推荐

