What is in hindsight a foolish way to do generator expressions

March 5th, 2009
programming, python, tech
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, substack

Recent posts on blogs I like:

Parenting standards and the village

Cartoons Hate Her has written about the village nobody wants. In principle, parents usually want a community to help take care of their kids: someone to bring meals when they get sick, keep an eye on their children while they play, and talk to about paren…

via Thing of Things December 19, 2025

Opinionated takes on parenting

This post is a collection of parenting takes that sometimes go through my head, based on my experience raising our two boys (5 and 2 years old). All of this is based on my experience and might not apply to others (see the law of equal and opposite advice)…

via Victoria Krakovna December 16, 2025

How to Make a Christmas Wreath

Yesterday, I made a Christmas wreath. Here's how to make one. First, find an evergreen tree near your house. Clip off a few branches from the tree. Try to have as many leaves or needles on the branches as possible. Next, bring them home. What I usu…

via Anna Wise's Blog Posts December 6, 2025

more     (via openring)