Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: strange syntax rules on list comprehension conditions

Reply
Thread Tools

Re: strange syntax rules on list comprehension conditions

 
 
Chris Mellon
Guest
Posts: n/a
 
      01-18-2008
On Jan 18, 2008 12:53 PM, Nicholas <(E-Mail Removed)> 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.
 
Reply With Quote
 
 
 
 
Paul McGuire
Guest
Posts: n/a
 
      01-18-2008
On Jan 18, 1:04*pm, "Chris Mellon" <(E-Mail Removed)> wrote:
> On Jan 18, 2008 12:53 PM, Nicholas <(E-Mail Removed)> 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
 
Reply With Quote
 
 
 
 
Dustan
Guest
Posts: n/a
 
      01-18-2008
On Jan 18, 1:04 pm, "Chris Mellon" <(E-Mail Removed)> wrote:
> On Jan 18, 2008 12:53 PM, Nicholas <(E-Mail Removed)> 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]

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
List comprehension in if clause of another list comprehension Vedran Furac( Python 4 12-19-2008 01:35 PM
Appending a list's elements to another list using a list comprehension Debajit Adhikary Python 17 10-18-2007 06:45 PM
list comprehension syntax..? Gregory Guthrie Python 4 08-01-2006 07:38 PM
List Comprehension Syntax Moosebumps Python 35 07-22-2004 05:45 PM
Re: List Comprehension Syntax LittleDanEhren@yahoo.com Python 2 07-12-2004 05:45 PM



Advertisments