首页 > 解决方案 > 在下面提到的情况下,如何有效地比较两个列表中的字符串:

问题描述

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_names 的每个元素与 t_codes 的每个元素进行匹配来从 t_codes 创建 2 个列表以创建 -

清单 1 是

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

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

清单 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_names 的 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)

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

标签: python

解决方案


海事组织,您正在寻找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']

推荐阅读