You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:10:56