(Python新手在这里:)
我一直试图过滤一个子列表列表(所有相同的长度),基于子列表元素中某些字符串的存在。为了创建包含的标准,我做了以下工作,效果很好:
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列表中排除的标准,那么以下内容就无效了:
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个子列表,而且有十几个包含,如果我能做到的话--排除标准。我不确定这些对象的大小是否/如何影响任何可能的解决方案。
发布于 2022-10-13 19:31:11
您正在遍历exclusion_criteria中的所有元素,如果任何元素不匹配,则将项添加到filtered_list中。最后,这意味着您的filtered_list拥有所有的项。
尝试使用all()和/或any()获得匹配:
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)指纹:
[
["Jane", "Administrator", "Company3"],
["Joe", "IT Specialist", "Company4"]
]https://stackoverflow.com/questions/74060807
复制相似问题