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

如何保留含指定关键词的嵌套子列表?正则实现求助

筛选嵌套列表中含特定关键词的子列表

问题描述

我通过for循环生成了一个嵌套列表,结构如下:

[['8.761,00', '67.512,00', '0,00', '', ''], [None, '', '', '', ''], ['', 'Dovuto', 'Pagato', 'Rimborsato', 'Debito/Credito'], ['Soggettivo 15%', '1.314,15', '1.314,15', '0,00', '0,00'], ['Integrativo 4%', '2.700,48', '2.700,48', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '113,20', '113,20', '0,00', '0,00'], ['Totale Contributi', '4.127,83', '4.127,83', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.127,83', '4.127,83', '0,00', '0,00'], ['', '', '', '', ''], ['Anno 2016 Reddito Prof.le', 'Vol. Affari 4% Vo', 'l. Affari 2%', '', ''], ['9.263,00', '85.149,00', '0,00', '', ''], [None, '', '', '', ''], ['', 'Dovuto', 'Pagato', 'Rimborsato', 'Debito/Credito'], ['Soggettivo 16%', '1.482,08', '1.482,08', '0,00', '0,00'], ['Integrativo 4%', '3.405,96', '3.405,96', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '110,29', '110,29', '0,00', '0,00'], ['Totale Contributi', '4.998,33', '4.998,33', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.998,33', '4.998,33', '0,00', '0,00'], ['', '', '', '', '']]

需要仅保留包含Soggettivo、Integrativo、Maternità、Interessi、Sanzioni、Totale、Totale Contributi关键词的子列表,删除所有其他子列表(比如空列表、含年份的列表等)。由于子列表索引不固定,无法通过索引删除,尝试正则未成功,求解决方法。

期望最终结果:

[['Soggettivo 15%', '1.314,15', '1.314,15', '0,00', '0,00'], ['Integrativo 4%', '2.700,48', '2.700,48', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '113,20', '113,20', '0,00', '0,00'], ['Totale Contributi', '4.127,83', '4.127,83', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.127,83', '4.127,83', '0,00', '0,00'], ['Soggettivo 16%', '1.482,08', '1.482,08', '0,00', '0,00'], ['Integrativo 4%', '3.405,96', '3.405,96', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '110,29', '110,29', '0,00', '0,00'], ['Totale Contributi', '4.998,33', '4.998,33', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.998,33', '4.998,33', '0,00', '0,00']]

解决方案

不需要用正则,直接通过字符串包含判断+列表推导式就能快速筛选,代码如下:

original_list = [['8.761,00', '67.512,00', '0,00', '', ''], [None, '', '', '', ''], ['', 'Dovuto', 'Pagato', 'Rimborsato', 'Debito/Credito'], ['Soggettivo 15%', '1.314,15', '1.314,15', '0,00', '0,00'], ['Integrativo 4%', '2.700,48', '2.700,48', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '113,20', '113,20', '0,00', '0,00'], ['Totale Contributi', '4.127,83', '4.127,83', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.127,83', '4.127,83', '0,00', '0,00'], ['', '', '', '', ''], ['Anno 2016 Reddito Prof.le', 'Vol. Affari 4% Vo', 'l. Affari 2%', '', ''], ['9.263,00', '85.149,00', '0,00', '', ''], [None, '', '', '', ''], ['', 'Dovuto', 'Pagato', 'Rimborsato', 'Debito/Credito'], ['Soggettivo 16%', '1.482,08', '1.482,08', '0,00', '0,00'], ['Integrativo 4%', '3.405,96', '3.405,96', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '110,29', '110,29', '0,00', '0,00'], ['Totale Contributi', '4.998,33', '4.998,33', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.998,33', '4.998,33', '0,00', '0,00'], ['', '', '', '', '']]

# 定义需要保留的关键词集合
keep_keywords = {'Soggettivo', 'Integrativo', 'Maternità', 'Interessi', 'Sanzioni', 'Totale', 'Totale Contributi'}

# 筛选子列表:先排除第一个元素非字符串的情况,再检查是否包含目标关键词
filtered_list = [
    sublist for sublist in original_list
    if isinstance(sublist[0], str) and any(keyword in sublist[0] for keyword in keep_keywords)
]

print(filtered_list)

代码说明

  1. 关键词集合:用集合存储目标关键词,提升判断效率。
  2. 列表推导式筛选:
    • 先判断子列表的第一个元素是否为字符串,直接排除包含None或空字符串开头的无效子列表。
    • 再检查该字符串是否包含任一目标关键词,满足条件的子列表会被保留。

运行这段代码就能得到你需要的最终列表。

内容的提问来源于stack exchange,提问作者deidei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:57:03