::  Posts  ::  RSS  ::  ◂◂RSS  ::  Contact

What is in hindsight a foolish way to do generator expressions

March 5th, 2009
python, programming  [html]
In python I often want to do things like this:
       if x.startswith("foo") for all x in a_list:
          ...

       if is_verb(leaf) for some leaf in a_tree:
          ...
    
I usually end up coding these a bunch of different ways, the shortest of which are:
        if False not in [x.startswith("foo") for x in a_list]:
           ...

        if True in [is_verb(leaf) for leaf in a_tree]:
           ...
    
But these don't short circut and are ugly. Sometimes I'll write little funtions but I don't like that either. Currently the syntax if [expr] for ... doesn't mean anything, so this should be possible. I wonder if it would be worth writing a PEP.

Update 3/6/2009: George Dahl writes that python already does this. I should be writing those examples as:

       if all(x.startswith("foo") for x in a_list):
          ...

       if any(is_verb(leaf) for leaf in a_tree):
          ...
    
These examples use generator expressions instead of list comprehensions. And builtins any and all. Especially as one can use any function, not just any or all, this is a much nicer syntax than what I wanted. It doesn't read as fluidly as english, but then again it doesn't deal with these two specific case as special cases of the if statement. So I'm quite happy.

The only other real downside is also I think the reason I didn't end up with this when fiddling around at the python prompt: you need somewhat non-intuitive parens. I'm pretty sure when I was trying to see if there was a way to do what I wanted I did:

    >>> x for x in range(7)
      File "<stdin>", line 1
        x for x in range(7)
            ^
      SyntaxError: invalid syntax
    
And then moved on. As a human I don't see an obvious reason why I can't enter the obvious thing. Is there something else a statement beginning with "x for " could mean?

Comment via: facebook

Recent posts on blogs I like:

Assume Nordic Costs: London Edition

A month ago I made maps proposing some subway and regional rail extensions in New York and noting what they would cost if New York could build as cheaply as the Scandinavian capitals. Here is the same concept, but with London rather than New York. Here is…

via Pedestrian Observations June 25, 2019

Instead of “I’m anxious,” try “I feel threatened”

cw: teaching to learn I have a long history with anxiety, and I’m pretty good at noticing when it’s happening. The problem is that I’m always anxious. Noticing anxiety doesn’t snap me out of anxiety– in fact, it often produces meta-anxiety, anxiety about …

via Holly Elmore June 20, 2019

Checkmate on blackmail?

It has been argued that blackmail should be legal if gossip is legal, and even that there are no good consequentialist counterarguments (!). I think this isn’t obvious because the disclosures incentivized by blackmail are systematically worse than gossip.…

via The sideways view June 2, 2019

more     (via openring)

More Posts:


  ::  Posts  ::  RSS  ::  ◂◂RSS  ::  Contact