Python如何遍历嵌套列表并批量删除None值?
优化嵌套列表None值过滤的简洁实现
你当前的实现虽然可行,但存在大量重复代码,这里提供几种更简洁的优化方案:
方案1:批量处理后解包赋值
利用列表推导式批量处理所有子列表,再将结果解包赋值回原变量,代码简洁且可读性强:
# 定义原始嵌套列表 my_list = [src_ips, dst_ips, src_fqdns, dst_fqdns, src_groups, dst_groups, services, service_groups] # 批量过滤每个子列表中的None值 processed_lists = [[item for item in sublist if item is not None] for sublist in my_list] # 将处理后的结果重新赋值给原变量(注意顺序要和my_list完全一致) src_ips, dst_ips, src_fqdns, dst_fqdns, src_groups, dst_groups, services, service_groups = processed_lists
方案2:通过变量名字典批量更新
如果不想提前构建my_list,可以通过变量名字符串批量更新全局变量(适用于全局环境下的变量):
# 列出需要处理的变量名称 var_names = ['src_ips', 'dst_ips', 'src_fqdns', 'dst_fqdns', 'src_groups', 'dst_groups', 'services', 'service_groups'] # 循环处理每个变量 for name in var_names: globals()[name] = [item for item in globals()[name] if item is not None]
注意:如果变量定义在函数内部,
globals()需要替换为locals(),但locals()的修改在部分场景下可能不生效,因此方案1更稳妥。
方案3:使用字典组织相关数据(推荐)
从代码可维护性角度,更优雅的方式是将这些相关列表统一放在字典中,避免零散的单独变量:
# 将所有相关列表存入字典 network_data = { 'src_ips': src_ips, 'dst_ips': dst_ips, 'src_fqdns': src_fqdns, 'dst_fqdns': dst_fqdns, 'src_groups': src_groups, 'dst_groups': dst_groups, 'services': services, 'service_groups': service_groups } # 批量过滤字典中每个列表的None值 for key, value in network_data.items(): network_data[key] = [item for item in value if item is not None] # 若仍需要单独变量,可按需解包 src_ips = network_data['src_ips'] # 或者一次性解包(顺序需和字典插入顺序一致,Python 3.7+字典保留插入顺序) src_ips, dst_ips, src_fqdns, dst_fqdns, src_groups, dst_groups, services, service_groups = network_data.values()
这种方式将相关数据聚合管理,后续新增或修改列表时只需调整字典,代码扩展性更强。
内容的提问来源于stack exchange,提问作者somequestion
相关产品推荐
相关产品推荐

