Slawomir Nowaczyk wrote: > #> No, the list comprehension lets you write an expression directly > #> avoiding a function call, and it also allows you to add in a > #> condition which can be used to filer the sequence. > > I am not sure if I understand you correctly, but... Does it? > >>>> a = [0,1,2,3,7,8,9] >>>> [x for x in takewhile(lambda x: x in a, range(10))] > [0, 1, 2, 3] >>>> [x for x in takewhile(x in a, range(10))] > Traceback (most recent call last): > File "<stdin>", line 1, in ? > TypeError: 'bool' object is not callable > > Did I miss something?
Yes, you missed out a lambda (so I was wrong, your suggestion would actually gain you more than 3 characters of typing) Try: >>> a = [0,1,2,3,7,8,9] >>> [x for x in takewhile(lambda x:x in a, range(10))] [0, 1, 2, 3] For this particular expression you could also write: >>> [x for x in takewhile(a.__contains__, range(10))] [0, 1, 2, 3] or with Python 2.5 we can avoid referencing __contains__ with the following variant: >>> from itertools import takewhile >>> from functools import partial >>> from operator import contains >>> a = [0,1,2,3,7,8,9] >>> [x for x in takewhile(partial(contains,a), range(10))] [0, 1, 2, 3] >>> -- http://mail.python.org/mailman/listinfo/python-list