Python嵌套列表筛选问题:基于子元素数值和的子集过滤
问题解决思路
你的代码存在几个关键问题:
- 硬编码循环次数(
i<10),无法适配原列表的实际长度,后续列表扩容也会失效 - 求和时错误使用
list[i][2][2],应该用[-1]来稳定获取每个最内层子列表的最后一个元素 - 条件判断写成
<8,不符合规则要求的≤8 - 逻辑错误:没有将符合条件的子列表添加到
new_list,反而去判断元素是否已存在,完全偏离需求 - 语法错误:
if语句末尾缺少冒号,代码缩进不规范
正确实现代码
# 修正原列表的语法错误(补充缺失逗号,将标识符改为字符串避免报错) original_list = [ [['a', 2], ['c', 3], ['e', 3]], [['g', 4], ['i', 4], ['k', 3]], [['b', 3], ['d', 2], ['f', 2]] ] new_list = [] # 遍历每个二级子列表,自动适配原列表长度 for sublist in original_list: # 计算当前二级子列表中所有最内层子列表最后一个元素的和 total = sum(item[-1] for item in sublist) # 符合条件则加入新列表 if total <= 8: new_list.append(sublist) print(new_list)
代码说明
- 用
for循环遍历原列表,无需关心列表长度,后续扩容也能正常处理 - 用生成器表达式
sum(item[-1] for item in sublist)求和,不用硬编码内层元素索引,即使二级子列表的元素数量变化也能稳定工作 - 严格按照规则判断
total <=8,符合条件就将当前二级子列表追加到new_list - 修正了原列表的语法问题(补充逗号、将
a这类裸标识符改为字符串,避免Python识别为未定义变量报错)
运行后new_list的结果为:
[[['a', 2], ['c', 3], ['e', 3]], [['b', 3], ['d', 2], ['f', 2]]]
内容的提问来源于stack exchange,提问作者Junior Salvador
相关产品推荐
相关产品推荐

