Python如何统计三层嵌套列表指定值出现次数并批量替换,避免两层循环
解决方案
1. 统计数值99的总出现次数
两种无显式嵌套循环的实现方案:
方案1:字符串统计法(最简洁)
直接将嵌套列表整体转为字符串后统计匹配项,零循环代码:
count = str(DESK_POLE).count("99") # 运行结果count = 4,和实际数据匹配
注意:该方案仅适配当前场景,即所有元素均为独立整数、不存在
199这类会拆解出99子串的数值,通用性稍弱但代码量最小。
方案2:生成器表达式统计(通用场景)
用生成器隐式迭代遍历所有元素,无显式循环代码块:
count = sum(1 for level1 in DESK_POLE for level2 in level1 for val in level2 if val == 99) # 运行结果同样为4,适配任意整数元素的嵌套列表
2. 将所有99替换为88
同样提供两种无显式嵌套循环的方案:
方案1:字符串替换+安全解析(零循环代码)
替换字符串后用ast.literal_eval安全转回列表结构,比直接用eval更安全无执行风险:
import ast DESK_POLE = ast.literal_eval(str(DESK_POLE).replace("99", "88"))
方案2:三层列表推导式(无额外依赖)
通过列表推导式隐式迭代完成替换,无需导入额外库:
DESK_POLE = [[[88 if val == 99 else val for val in level2] for level2 in level1] for level1 in DESK_POLE]
内容的提问来源于stack exchange,提问作者Radek
相关产品推荐
相关产品推荐

