Reputation: 21961
I have the foll. list in python:
list_vals = ['primf_to_primf', 'primf_to_primn', 'primf_to_secdf', 'primf_to_secdn', 'primf_to_urban', 'primf_to_c3ann', 'primf_to_c4ann', 'primf_to_c3per', 'primf_to_c4per', 'primf_to_c3nfx', 'primf_to_pastr', 'primf_to_range', 'primn_to_primf', 'primn_to_primn', 'primn_to_secdf', 'primn_to_secdn', 'primn_to_urban', 'primn_to_c3ann', 'primn_to_c4ann', 'primn_to_c3per', 'primn_to_c4per', 'primn_to_c3nfx', 'primn_to_pastr', 'primn_to_range', 'secdf_to_primf', 'secdf_to_primn', 'secdf_to_secdf', 'secdf_to_secdn', 'secdf_to_urban', 'secdf_to_c3ann', 'secdf_to_c4ann', 'secdf_to_c3per', 'secdf_to_c4per', 'secdf_to_c3nfx', 'secdf_to_pastr', 'secdf_to_range', 'secdn_to_primf', 'secdn_to_primn', 'secdn_to_secdf', 'secdn_to_secdn', 'secdn_to_urban', 'secdn_to_c3ann', 'secdn_to_c4ann', 'secdn_to_c3per', 'secdn_to_c4per', 'secdn_to_c3nfx', 'secdn_to_pastr', 'secdn_to_range', 'urban_to_primf', 'urban_to_primn', 'urban_to_secdf', 'urban_to_secdn', 'urban_to_urban', 'urban_to_c3ann', 'urban_to_c4ann', 'urban_to_c3per', 'urban_to_c4per', 'urban_to_c3nfx', 'urban_to_pastr', 'urban_to_range', 'c3ann_to_primf', 'c3ann_to_primn', 'c3ann_to_secdf', 'c3ann_to_secdn', 'c3ann_to_urban', 'c3ann_to_c3ann', 'c3ann_to_c4ann', 'c3ann_to_c3per', 'c3ann_to_c4per', 'c3ann_to_c3nfx', 'c3ann_to_pastr', 'c3ann_to_range', 'c4ann_to_primf', 'c4ann_to_primn', 'c4ann_to_secdf', 'c4ann_to_secdn', 'c4ann_to_urban', 'c4ann_to_c3ann', 'c4ann_to_c4ann', 'c4ann_to_c3per', 'c4ann_to_c4per', 'c4ann_to_c3nfx', 'c4ann_to_pastr', 'c4ann_to_range', 'c3per_to_primf', 'c3per_to_primn', 'c3per_to_secdf', 'c3per_to_secdn', 'c3per_to_urban', 'c3per_to_c3ann', 'c3per_to_c4ann', 'c3per_to_c3per', 'c3per_to_c4per', 'c3per_to_c3nfx', 'c3per_to_pastr', 'c3per_to_range', 'c4per_to_primf', 'c4per_to_primn', 'c4per_to_secdf', 'c4per_to_secdn', 'c4per_to_urban', 'c4per_to_c3ann', 'c4per_to_c4ann', 'c4per_to_c3per', 'c4per_to_c4per', 'c4per_to_c3nfx', 'c4per_to_pastr', 'c4per_to_range', 'c3nfx_to_primf', 'c3nfx_to_primn', 'c3nfx_to_secdf', 'c3nfx_to_secdn', 'c3nfx_to_urban', 'c3nfx_to_c3ann', 'c3nfx_to_c4ann', 'c3nfx_to_c3per', 'c3nfx_to_c4per', 'c3nfx_to_c3nfx', 'c3nfx_to_pastr', 'c3nfx_to_range', 'pastr_to_primf', 'pastr_to_primn', 'pastr_to_secdf', 'pastr_to_secdn', 'pastr_to_urban', 'pastr_to_c3ann', 'pastr_to_c4ann', 'pastr_to_c3per', 'pastr_to_c4per', 'pastr_to_c3nfx', 'pastr_to_pastr', 'pastr_to_range', 'range_to_primf', 'range_to_primn', 'range_to_secdf', 'range_to_secdn', 'range_to_urban', 'range_to_c3ann', 'range_to_c4ann', 'range_to_c3per', 'range_to_c4per', 'range_to_c3nfx', 'range_to_pastr', 'range_to_range']
I would like to delete elements which have any of 5 of the foll. elements: c3ann c4ann c3per c4per c3nfx
y = [s for s in x if 'c3ann' not in list_vals]
How do I improve the approach above?
Upvotes: 0
Views: 672
Reputation: 62
I dont know what you want to improve .. speed, legibility, etc.
Maybe you want something like that:
res = filter(lambda word: 'c3ann' not in word, list_vals)
Upvotes: 0
Reputation: 473853
all()
would help:
words = ["c3ann", "c4ann", "c3per", "c4per", "c3nfx"]
y = [s for s in list_vals if all(word not in s for word in words)]
Or, as @HaiVu correctly noted, changing the logic to fit any()
would speed things up:
y = [s for s in list_vals if not any(word in s for word in words)]
Upvotes: 6
Reputation: 1077
You could use a regular expression:
import re
y = [item for item in list_vals if not re.search(r'c\d(ann|per|nfx)', item)]
Upvotes: 0