Python遍历嵌套列表时如何保留原有列表数据结构
Python遍历嵌套列表时保留原数据结构的实现方案
问题说明
现有代码逻辑为将嵌套列表z中每个元素,与对应位置的w中数值相加,但执行后输出为拍平的一维列表,丢失了原有的嵌套结构:
- 实际错误输出:
[4, 4, 4, 5, 5] - 期望正确输出:
[[4, 4, 4], [5, 5]]
问题出在原代码直接将计算后的单个内层元素追加到最外层列表,没有为每一组原始子列表维护对应的子容器,导致层级丢失。
解决方法
方法1:调整原生循环逻辑
处理每个原始子列表前,先创建临时子列表存储当前组的计算结果,等该子列表所有元素处理完成后,再将临时子列表整体追加到外层结果列表即可。
w = [3, 3] z = [[1, 1, 1], [2, 2]] lst = [] for x, y in zip(w, z): sub_list = [] for u in y: sub_list.append(u + x) lst.append(sub_list) print(lst) # 输出:[[4, 4, 4], [5, 5]]
方法2:嵌套列表推导式(更简洁)
直接通过两层列表推导式对应原列表的两层嵌套结构,写法更简洁,不需要手动维护临时变量:
w = [3, 3] z = [[1, 1, 1], [2, 2]] lst = [[u + x for u in y] for x, y in zip(w, z)] print(lst) # 输出:[[4, 4, 4], [5, 5]]
核心原则
遍历处理嵌套结构时,有多少层嵌套就要对应维护多少层的结果容器,不能跨层级直接将内层元素追加到最外层容器,否则就会出现结构拍平的问题。
内容的提问来源于stack exchange,提问作者Elena Vazquez Peña
相关产品推荐
相关产品推荐

