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

如何从嵌套元组列表中移除第二个元素为'NNP'的元组

解决嵌套元组列表中移除指定词性元组的问题

嘿,我来帮你搞定这个需求!你的数据是三层嵌套的结构,目标是过滤掉所有第二个元素为NNP的元组,用Python的列表推导式或者嵌套循环都能轻松实现,下面给你详细的方案:

先修正输入数据的小问题

首先注意你提供的示例里第一个子列表的元组之间缺了逗号,这会导致语法错误,我先帮你补全正确的输入:

lis = [
    [[('This', 'DT'), ('PM', 'NNP'), ('Doctor', 'NNP'), ('Sambit', 'NNP'), ('Patra', 'NNP'), ('Spokesperson', 'NNP')]],
    [[('Can', 'MD'), ('Media', 'NNP'), ('lambast', 'VB'), ('Sonia', 'NNP'), ('Gandhi', 'NNP'), ('up', 'RP'), ('Dalit', 'NNP'), ('Sitaram', 'NNP'), ('Dalit', 'NNP'), ('President', 'NNP')]]
]

方法1:简洁的嵌套列表推导式

这是Python里处理这类嵌套结构最常用的方式,格式化后的多行写法更易读:

# 逐层遍历并过滤,只保留词性不是NNP的元组
filtered_lis = [
    [
        [token for token in sub_sub_list if token[1] != 'NNP']
        for sub_sub_list in sub_list
    ]
    for sub_list in lis
]

代码解释

  • 最外层遍历lis中的每一个二级列表(比如[[('This', 'DT'), ...]])
  • 中间层遍历二级列表中的元组列表(比如[('This', 'DT'), ...])
  • 最内层遍历每个元组,只保留第二个元素(词性)不等于NNP的元组

运行后得到的结果是:

[
    [[('This', 'DT')]],
    [[('Can', 'MD'), ('lambast', 'VB'), ('up', 'RP')]]
]

方法2:更直观的嵌套for循环

如果觉得列表推导式有点抽象,用嵌套循环来写逻辑会更清晰,适合新手理解:

filtered_lis = []
# 遍历最外层列表
for sub_list in lis:
    temp_sub = []
    # 遍历第二层列表
    for sub_sub_list in sub_list:
        temp_sub_sub = []
        # 遍历每个元组,过滤指定词性
        for token in sub_sub_list:
            if token[1] != 'NNP':
                temp_sub_sub.append(token)
        temp_sub.append(temp_sub_sub)
    filtered_lis.append(temp_sub)

这段代码和列表推导式的效果完全一致,只是用循环的方式把每一步拆解开了,可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:12:46