what list comprehension can't

Discussion in 'Python' started by ajikoe@gmail.com, Jun 24, 2005.

1. Guest

Hello,

Can we impose if then else into list comprehension ?
Like we do in lambda-map form:

This code change None into 0
L = [None, 12]
R = map(lambda x: (x==None and [0] or x)[0], L) # [0,12]

pujo

, Jun 24, 2005

2. Devan LGuest

I wasn't aware that python supported "if then else".

Devan L, Jun 24, 2005

3. Christophe DelordGuest

Hello,

On 24 Jun 2005 11:45:14 -0700, wrote:

> Hello,
>
> Can we impose if then else into list comprehension ?
> Like we do in lambda-map form:
>
> This code change None into 0
> L = [None, 12]
> R = map(lambda x: (x==None and [0] or x)[0], L) # [0,12]
>

Do you mean:
[(x==None and [0] or [x])[0] for x in L]
or [{None:0}.get(x,x) for x in L]
or [x or 0 for x in L]

Well, the third solution doesn't exactly fit the specification but may

Christophe

Christophe Delord, Jun 24, 2005
4. Guest

Thank you

pujo

, Jun 24, 2005
5. Steven D'ApranoGuest

On Fri, 24 Jun 2005 21:04:15 +0200, Christophe Delord wrote:

> Hello,
>
> On 24 Jun 2005 11:45:14 -0700, wrote:
>
>> Hello,
>>
>> Can we impose if then else into list comprehension ?
>> Like we do in lambda-map form:
>>
>> This code change None into 0
>> L = [None, 12]
>> R = map(lambda x: (x==None and [0] or x)[0], L) # [0,12]
>>

>
> Do you mean:
> [(x==None and [0] or [x])[0] for x in L]
> or [{None:0}.get(x,x) for x in L]
> or [x or 0 for x in L]
>
> Well, the third solution doesn't exactly fit the specification but may

Or, more generally,

[0 for x in L if x is None]

which doesn't solve the asked-for question, but is a useful feature.

--
Steven.

Steven D'Aprano, Jun 25, 2005