From: AlienBaby on
Hi,

just a quick one,

Is it possible to achieve a default value in a list comprehension
where the if-clause is false?

Ie, something similar to:

[ a for a in b if something(a) else 'default' ]

the idea being that, rather than skip a value if the if-clause is
false, to place a default value at that position in the returned list
instead.

?

Thanks,


Matt.


From: eb303 on
On Apr 19, 2:20 pm, AlienBaby <matt.j.war...(a)gmail.com> wrote:
> Hi,
>
> just a quick one,
>
> Is it possible to achieve a default value in a list comprehension
> where the if-clause is false?
>
> Ie, something similar to:
>
> [ a for a in b if something(a) else 'default' ]
>
> the idea being that, rather than skip a value if the if-clause is
> false, to place a default value at that position in the returned list
> instead.
>
> ?
>
> Thanks,
>
> Matt.

[a if something(a) else 'default' for a in b]

HTH
- Eric -
From: AlienBaby on
On Apr 19, 1:23 pm, eb303 <eric.brunel.pragma...(a)gmail.com> wrote:
> On Apr 19, 2:20 pm, AlienBaby <matt.j.war...(a)gmail.com> wrote:
>
>
>
>
>
> > Hi,
>
> > just a quick one,
>
> > Is it possible to achieve a default value in a list comprehension
> > where the if-clause is false?
>
> > Ie, something similar to:
>
> > [ a for a in b if something(a) else 'default' ]
>
> > the idea being that, rather than skip a value if the if-clause is
> > false, to place a default value at that position in the returned list
> > instead.
>
> > ?
>
> > Thanks,
>
> > Matt.
>
> [a if something(a) else 'default' for a in b]
>
> HTH
>  - Eric -- Hide quoted text -
>
> - Show quoted text -

Ahh. Gotcha, thankyou :)
From: Bruno Desthuilliers on
eb303 a �crit :
> On Apr 19, 2:20 pm, AlienBaby <matt.j.war...(a)gmail.com> wrote:
>> Hi,
>>
>> just a quick one,
>>
>> Is it possible to achieve a default value in a list comprehension
>> where the if-clause is false?
>>
>> Ie, something similar to:
>>
>> [ a for a in b if something(a) else 'default' ]
>>
>> the idea being that, rather than skip a value if the if-clause is
>> false, to place a default value at that position in the returned list
>> instead.
>>
>> ?
>>
>> Thanks,
>>
>> Matt.
>
> [a if something(a) else 'default' for a in b]

Or you could have "something" taking a "default" argument and returning
either it's argument (instead of True) or the "default" one (instead of
False), and get rid of the if/else test in the list comp, ie:

def something(obj, default=False):
if whatever(obj):
return obj
else:
return default

results = [something(a, default="default") for a in b]