[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Re: strange syntax rules on list comprehension conditions

Chris Mellon

1/18/2008 7:05:00 PM

On Jan 18, 2008 12:53 PM, Nicholas <nicholasinparis@gmail.com> wrote:
> I was quite delighted today, after extensive searches yielded nothing, to
> discover how to place an else condition in a list comprehension.
> Trivial mask example:
> >>> [True if i <5 else False for i in range(10)] # A
> [True, True, True, True, True, False, False, False, False, False]
>
> I then experimented to drop the else statement which yields an error
> >>> [i if i>3 for i in range(10)]
> Traceback ( File "<interactive input>", line 1
> this syntax works of course
> >>> [i if i>3 else i for i in range(10)]
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>
> Does anybody else find this lack of symmetry odd?
>

"x if y else x" is an expression - it's the Python equivalent of C's
ternary operator. The mechanism for filtering in a list comp is [x for
x in y if x].

Your stumbling upon the ternary expression was a happy accident, and
your confusing comes from trying to generalize the wrong operation.
2 Answers

Paul McGuire

1/18/2008 10:36:00 PM

0

On Jan 18, 1:04 pm, "Chris Mellon" <arka...@gmail.com> wrote:
> On Jan 18, 2008 12:53 PM, Nicholas <nicholasinpa...@gmail.com> wrote:
>
> > I was quite delighted today, after extensive searches yielded nothing, to
> > discover how to place an else condition in a list comprehension.
> > Trivial mask example:
> > >>> [True if i <5 else False for i in range(10)]       # A
> > [True, True, True, True, True, False, False, False, False, False]
>

I think this would be preferred over your ternary-ish expression:

>>> [ i<5 for i in range(10) ]
[True, True, True, True, True, False, False, False, False, False]

Do you also write code like:

if i<5 == True:
blah...

If so, please just write:

if i<5:
better blah...

-- Paul

Dustan

1/18/2008 11:45:00 PM

0

On Jan 18, 1:04 pm, "Chris Mellon" <arka...@gmail.com> wrote:
> On Jan 18, 2008 12:53 PM, Nicholas <nicholasinpa...@gmail.com> wrote:
>
> > I was quite delighted today, after extensive searches yielded nothing, to
> > discover how to place an else condition in a list comprehension.
> > Trivial mask example:
> > >>> [True if i <5 else False for i in range(10)] # A
> > [True, True, True, True, True, False, False, False, False, False]
>
> > I then experimented to drop the else statement which yields an error
> > >>> [i if i>3 for i in range(10)]

That would be:

[i for i in range(10) if i>3]

> > Traceback ( File "<interactive input>", line 1
> > this syntax works of course
> > >>> [i if i>3 else i for i in range(10)]
> > [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]