在下面提到的情况下,如何有效地比较两个列表中的字符串:

2024-05-17 10:18:32 发布

您现在位置:Python中文网/ 问答频道 /正文

t_codes = ["11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-VM-ZRA-Operator",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-VM-ZRA-Admin",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-ZRA-User-VM-Admin",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-VM-ZRA-Operator",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-VM-ZRA-Operator",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-VM-ZRA-Admin",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-ZRA-User-VM-Admin",
             "22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-VM-ZRA-Operator",
             "22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-VM-ZRA-Admin",
             "22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-ZRA-User-VM-Admin",
             "22-GLB-IaaS-PaaS-PROD-MSDP-CUSTOMER-IN-ZRA-User-VM-Admin",    
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-VM-ZRA-Operator"]

t_names = ["Outsite", "NewFm", "CUSTOMER-IN"]

上面提到的是我最初的输入列表

我需要通过将t_名称的每个元素与t_代码的每个元素匹配来从t_代码创建2个列表,以创建-

清单1是

["11-XXX-Yaas-ZaaS-XXX-ZZZZ-VM-ZRA-Operator" , "11-XXX-Yaas-ZaaS-XXX-ZZZZ-VM-ZRA-Operator"] 

此列表包含不包含t_名称中提到的任何字符串的所有元素

清单2是

["11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-VM-ZRA-Operator",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-VM-ZRA-Admin",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-ZRA-User-VM-Admin",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-VM-ZRA-Operator",           
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-VM-ZRA-Admin",
             "11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-ZRA-User-VM-Admin",
             "22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-VM-ZRA-Operator",
             "22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-VM-ZRA-Admin",
             "22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-ZRA-User-VM-Admin",
             "22-GLB-IaaS-PaaS-PROD-MSDP-CUSTOMER-IN-ZRA-User-VM-Admin" ]

此列表包含t_名称中的Outsite、NewFm和CUSTOMER-IN字符串

我尝试的是:

does_contain = []
doesnt_contain = []
for tool in t_names:
    for team in t_codes:         
        if bool(re.search(tool, team)):
            does_contain.append(team)
        else:
            doesnt_contain.append(team)
            
print(does_contain)
print("-------------")
print(doesnt_contain)

由于明显的原因,这并没有给我预期的输出。请帮忙


Tags: adminvmprodoperatorxxxglbiaaspaas
2条回答

依我看,你正在寻找any(...)

list1, list2 = [[], []]
for t_code in t_codes:
    if any(t_name in t_code for t_name in t_names):
        list1.append(t_code)
    else:
        list2.append(t_code)

print(list1)
print(list2)

这将为您的给定输入生成:

['11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-VM-ZRA-Operator', '11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-VM-ZRA-Admin', '11-XXX-Yaas-ZaaS-XXX-ZZZZ-Outsite-ZRA-User-VM-Admin', '11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-VM-ZRA-Operator', '11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-VM-ZRA-Admin', '11-XXX-Yaas-ZaaS-XXX-ZZZZ-NewFm-ZRA-User-VM-Admin', '22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-VM-ZRA-Operator', '22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-VM-ZRA-Admin', '22-GLB-IaaS-PaaS-PROD-MSDP-Outsite-ZRA-User-VM-Admin', '22-GLB-IaaS-PaaS-PROD-MSDP-CUSTOMER-IN-ZRA-User-VM-Admin']
['11-XXX-Yaas-ZaaS-XXX-ZZZZ-VM-ZRA-Operator', '11-XXX-Yaas-ZaaS-XXX-ZZZZ-VM-ZRA-Operator']

您应该将列表转换为set类型。set类型本机具有此类操作

相关问题 更多 >