kishore
kishore

Reputation: 51

How can I efficiently compare strings in two lists in the below mentioned case:

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"]

Above mentioned are my initial input lists.

I need to create 2 lists from t_codes by matching each element of t_names with each element of t_codes to create -

List 1 is

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

This list contains all the elements which does not contain any strings mentioned in t_names

List 2 is

["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" ]

This list contains Outsite, NewFm, CUSTOMER-IN strings from t_names.

What I tried is:

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)

This is not giving me expected output for obvious reasons. Please help.

Upvotes: 1

Views: 118

Answers (2)

Jan
Jan

Reputation: 43169

Imo, you're looking for 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)

This yields for your given input:

['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']

Upvotes: 1

Acccumulation
Acccumulation

Reputation: 3591

You should convert the lists to the set type. The set type has this sort of operation natively.

Upvotes: 0

Related Questions