first non-null element in a list, otherwise None
Arnaud Delobelle
arnodel at googlemail.com
Thu Sep 2 17:01:34 CEST 2010
On Sep 2, 2:48 pm, wheres pythonmonks <wherespythonmo... at gmail.com>
wrote:
> This should be trivial:
>
> I am looking to extract the first non-None element in a list, and
> "None" otherwise. Here's one implementation:
>
> >>> x = reduce(lambda x,y: x or y, [None,None,1,None,2,None], None)
> >>> print x
>
> 1
>
> I thought maybe a generator expression would be better, to prevent
> iterating over the whole list:
>
> >>> x = ( x for x in [None,1,2] if x is not None ).next()
> >>> print x
>
> 1
>
> However, the generator expression throws if the list is entirely None.
>
> With list comprehensions, a solution is:
>
> >>> x = ([ x for x in [None,1,2] if x is not None ] + [ None ] )[0]
>
> But this can be expensive memory wise. Is there a way to concatenate
> generator expressions?
>
> More importantly,
>
> Is there a better way? (In one line?)
>
> Thanks,
>
> W
Just for fun:
>>> print min([None, 2, None, None, 1], key=lambda x: x is None)
2
>>> print min([None, None, None], key=lambda x: x is None)
None
Looks clever but:
min([], key=lambda x: x is None) throws an exception.
--
Arnaud
More information about the Python-list
mailing list