Alexander, The essence of what you have proposed has been proposed (multiple times) before, and I seem to remember it was shot down.
The below functions offer the equivalent of list comprehensions with a final post-processing step. def cross(*args): if len(args) == 1: for i in args[0]: yield i elif len(args) == 2: for i in args[0]: for j in args[1]: yield i,j else: for i in args[0]: for j in cross(*args[1:]): yield (i,) + j def cross_with_predicate(*args, **kwargs): if not 'pred' in kwargs: for i in cross(*args): yield i pred = kwargs['pred'] if len(args) > 1: for i in cross(*args): if pred(*i): yield i else: for i in cross(*args): if pred(i): yield i Feel free to use that code and/or modify it to your heart's content (be careful of attempting to simplify cross, . - Josiah Alexander Myodov <[EMAIL PROTECTED]> wrote: > Hello, > > Well, we have "for", "while" and "if". We also have statements, > list generator expressions and list comprehensions. In > comprehensions we have the opportunity to use several for-s and in a > same expression (for i in range (0, 640) for j in range (0, 640)), > in loops we cannot; in comprehensions, we can use if-s to filter the > items; in loops, we cannot, and we have to write an inner comparison > instead. > > My opinion is that in so smart language as Python is, it would be > great to have them generalized, so that the features available in > list comprehensions should be available in statements, vice versa. > All three statements (for/while/if) could be joined > together into a single common one, where any of these could be > combined and used multiple times (but for the cases when a > "else"/"elif" etc causes are required, old-school one-statements > should be left); and for such common expressions, they should be > equal for both loop statements and list comprehensions/generator > expressions. > That is, the following loops should be possible: > ------- > # This gives us some sugar to get rid of unnecessary indentations > for x in range (0, 640) for y in range (0, 480): > ------- > for x in range (0, 640) if should_handle_this_column(x) \ > for y in range (0, 480) if should_handle_this_row(y): > ------- > for nX, nY in ( > f(x), f(y) > for x in range (0, 640) if should_handle_this_column(x) > for y in range (0, 480) if should_handle_this_row(y) > ): > ------- > for x in range (0, 640) for y in range (0, 480) while(!timeout()): > ------- > for x in range (0, 640) while(!timeout_pos_in_row()) for y in range (0, 480) > while(!timeout_rows()): > ------- > # And the latest and the hugest one: > for x in range (0, 640) if should_handle_this_column(x) > while(!timeout_pos_in_row()) \ > for y in range (0, 480) if should_handle_this_row(y) while(!timeout_rows() : > ------- > # And almost the same as generator expression: > for x, y in ( > f(x), f(y) > for x in range (0, 640) if should_handle_this_column(x) > while(!timeout_pos_in_row()) > for y in range (0, 480) if should_handle_this_row(y) > while(!timeout_rows() > ) > ------- > > Hope I didn't miss something important... > > -- > With best regards, > Alexander mailto:[EMAIL PROTECTED] > > > _______________________________________________ > Python-Dev mailing list > Python-Dev@python.org > http://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > http://mail.python.org/mailman/options/python-dev/jcarlson%40uci.edu _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com