On 12/3/2015 7:28 AM, Mark Lawrence wrote:
On 03/12/2015 01:15, c.bu...@posteo.jp wrote:
I would like to know how this could be done more elegant/pythonic.

I have a big list (over 10.000 items) with strings (each 100 to 300
chars long) and want to filter them.

list = .....

for item in list[:]:
   if 'Banana' in item:
      list.remove(item)
   if 'Car' in item:
      list.remove(item)

There are a lot of more conditions of course. This is just example code.
It doesn't look nice to me. To much redundance.

targets = ['Banana', 'Car'...]
for item in list[:]:
     for target in targets:
         if target in item:
             list.remove(item)


btw: Is it correct to iterate over a copy (list[:]) of that string list
and not the original one?


Absolutely :)

Even better, instead of copying and deleting, which is O(k*n), where n is the len of list and k is number deletions, is to create a new list with the item you want. In other words, actually filter, as you said you want.

targets = {'Banana', 'Car', ...}  # set intentional
newlist = [item for item in oldlist if item not in targets]

Generically, replace 'not in targets' with any boolean expression or function.


--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to