0

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?

1
  • 1
    Any 5? You mean all 5? Commented Mar 14, 2016 at 18:48

3 Answers 3

6

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)]
Sign up to request clarification or add additional context in comments.

2 Comments

all is slower than any. Your condition could be if not any(word in s for word in words). Also, a set is faster at look up than list: words = {"c3ann", ... }
I take back the comment about set. The first part of my comment is applicable.
0

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

1 Comment

No. Not at all. It would be much slower.
0

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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.