Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #99952

Re: filter a list of strings

From Peter Otten <__peter__@web.de>
Newsgroups comp.lang.python
Subject Re: filter a list of strings
Date 2015-12-03 11:13 +0100
Organization None
Message-ID <mailman.170.1449137650.14615.python-list@python.org> (permalink)
References <mailman.155.1449122975.14615.python-list@python.org> <lf51tb459f2.fsf@ling.helsinki.fi> <3pBBdn3nVcz5vP8@dovecot03.posteo.de> <201512030953.tB39rGLE011532@fido.openend.se>

Show all headers | View raw


Laura Creighton wrote:

> In a message of Thu, 03 Dec 2015 10:27:19 +0100, c.buhtz@posteo.jp writes:
>>Thank you for your suggestion. This will help a lot.
>>
>>On 2015-12-03 08:32 Jussi Piitulainen <harvesting@is.invalid> wrote:
>>> list = [ item for item in list
>>>          if ( 'Banana' not in item and
>>>               'Car' not in item ) ]
>>
>>I often saw constructions like this
>>  x for x in y if ...
>>But I don't understand that combination of the Python keywords (for,
>>in, if) I allready know. It is to complex to imagine what there really
>>happen.
>>
>>I understand this
>>  for x in y:
>>    if ...
>>
>>But what is about the 'x' in front of all that?
> 
> This is a list comprehension.
> see:
> https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
> 
> But I would solve your problem like this:
> 
> things_I_do_not_want = ['Car', 'Banana', <add all of them here>]
> things_I_want = []
> 
> for item in list_of_everything_I_started_with:
>     if item not in things_I_do_not_want:
>        things_I_want.append(item)

Note that unlike the original code your variant will not reject
"Blue Banana". If the OP wants to preserve the '"Banana" in item' test he 
can use

for item in list_of_everything_I_started_with:
    for unwanted in things_I_do_not_want:
        if unwanted in item:
            break
    else: # executed unless the for loop exits with break
        things_I_want.append(item)

or

things_I_want = [
    item for item in list_of_everything_I_started_with
    if not any(unwanted in item for unwanted in things_I_do_not_want)
]

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

filter a list of strings <c.buhtz@posteo.jp> - 2015-12-03 02:15 +0100
  Re: filter a list of strings Jussi Piitulainen <harvesting@is.invalid> - 2015-12-03 08:32 +0200
    Re: filter a list of strings <c.buhtz@posteo.jp> - 2015-12-03 10:27 +0100
      Re: filter a list of strings Jussi Piitulainen <harvesting@is.invalid> - 2015-12-03 13:53 +0200
      Re: filter a list of strings Peter Pearson <pkpearson@nowhere.invalid> - 2015-12-05 19:42 +0000
    Re: filter a list of strings Chris Angelico <rosuav@gmail.com> - 2015-12-03 20:40 +1100
    Re: filter a list of strings Wolfgang Maier <wolfgang.maier@biologie.uni-freiburg.de> - 2015-12-03 10:46 +0100
    Re: filter a list of strings Laura Creighton <lac@openend.se> - 2015-12-03 10:53 +0100
    Re: filter a list of strings jmp <jeanmichel@sequans.com> - 2015-12-03 11:03 +0100
    Re: filter a list of strings Peter Otten <__peter__@web.de> - 2015-12-03 11:13 +0100
    Re: filter a list of strings Denis McMahon <denismfmcmahon@gmail.com> - 2015-12-03 14:16 +0000
      Re: filter a list of strings Jussi Piitulainen <harvesting@is.invalid> - 2015-12-03 17:02 +0200
  Re: filter a list of strings Grobu <snailcoder@retrosite.invalid> - 2015-12-03 13:17 +0100

csiph-web