首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据每个子列表的特定元素是否符合某些标准,如何从列表中排除子列表?

根据每个子列表的特定元素是否符合某些标准,如何从列表中排除子列表?
EN

Stack Overflow用户
提问于 2022-10-13 19:22:32
回答 1查看 19关注 0票数 1

(Python新手在这里:)

我一直试图过滤一个子列表列表(所有相同的长度),基于子列表元素中某些字符串的存在。为了创建包含的标准,我做了以下工作,效果很好:

代码语言:javascript
运行
复制
lines = [['Bob','Risk Manager','Company1'],
         ['Bill','Senior Quality Control Manager','Company1'],
         ['Jill','Accreditation Specialist','Company2'],
         ['Jane','Administrator','Company3'],
         ['Joe','IT Specialist','Company4']]

filtered_lines = []

inclusion_criteria = [['Risk',1],['Quality',1],['Accred',1]]

for line in lines:
    for criterion in inclusion_criteria:
        if criterion[0] in line[criterion[1]]:
            filtered_lines.append(line)

上面的代码将第二个元素包含“风险”、“质量”或“Accred”的子列表填充到filtered_lines列表中,即“简”和“乔”被过滤掉了--这是按计划进行的。

但是,如果我想要定义从filtered_lines列表中排除的标准,那么以下内容就无效了:

代码语言:javascript
运行
复制
exclusion_criteria = [['Company1',2],['Company2',2]]

for line in lines:
    for criterion in exclusion_criteria:
        if criterion[0] not in line[criterion[1]]:
            filtered_lines.append(line)

当我运行上述代码时,我希望将第三个元素不包含'Company1‘或'Company2’的每个子列表添加到filtered_lines中,即filtered_lines应该只包含'Jane‘和'Joe',但这种情况不会发生。相反,不发生过滤,filtered_list的结果与原始行列表相同。

如何根据一组排除标准将项目从列表中删除?此外,是否有更好的方法来接近纳入标准?

P.S.:这里给出的行列表和标准只是一些例子;实际的行大约有25000个子列表,而且有十几个包含,如果我能做到的话--排除标准。我不确定这些对象的大小是否/如何影响任何可能的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-13 19:31:11

您正在遍历exclusion_criteria中的所有元素,如果任何元素不匹配,则将项添加到filtered_list中。最后,这意味着您的filtered_list拥有所有的项。

尝试使用all()和/或any()获得匹配:

代码语言:javascript
运行
复制
lines = [
    ["Bob", "Risk Manager", "Company1"],
    ["Bill", "Senior Quality Control Manager", "Company1"],
    ["Jill", "Accreditation Specialist", "Company2"],
    ["Jane", "Administrator", "Company3"],
    ["Joe", "IT Specialist", "Company4"],
]

exclusion_criteria = [["Company1", 2], ["Company2", 2]]
filtered_lines = []

for line in lines:
    if all(
        criterion[0] not in line[criterion[1]]
        for criterion in exclusion_criteria
    ):
        filtered_lines.append(line)

print(filtered_lines)

指纹:

代码语言:javascript
运行
复制
[
  ["Jane", "Administrator", "Company3"], 
  ["Joe", "IT Specialist", "Company4"]
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74060807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档