any() and all() Was: Pre-PEP: Dictionary accumulator methods
> > Py2.5 is already going to include any() and all() as builtins. The > > signature does not include a function, identity or otherwise. > > Instead, the caller can > > write a listcomp or genexp that evaluates to True or False: > > > > any(x >= 42 for x in data) [Roose] > Oh great, I just saw that. . . . > But I wish it could be included in Python 2.4.x. If it is any consolation, the any() can already be expressed somewhat cleanly and efficiently in Py2.4 with genexps: True in (x >= 42 for x in data) The translation for all() is a little less elegant: False not in (x >= 42 for x in data) Raymond Hettinger -- http://mail.python.org/mailman/listinfo/python-list
any() and all() Was: Pre-PEP: Dictionary accumulator methods
[Roose] > Actually I was just looking at Python 2.5 docs since you mentioned this. > > http://www.python.org/dev/doc/devel/whatsnew/node3.html > > It says min() and max() will gain a key function parameter, and sort() > gained one in Python 2.4 (news to me). It also appears in itertools.groupby() and, for Py2.5, in heapq.nsmallest() and heapq.nlargest(). > And they do indeed default to the identity in all 3 cases, so this seems > very inconsistent. If one of them has it, and sort gained the argument even > in Python 2.4 with generator expressions, then they all should have it. > > > any(x >= 42 for x in data) > > Not to belabor the point, but in the example on that page, max(L, key=len) > could be written max(len(x) for x in L). Think about it. A key= function is quite a different thing. It provides a *temporary* comparison key while retaining the original value. IOW, your re-write is incorrect: >>> L = ['the', 'quick', 'brownish', 'toad'] >>> max(L, key=len) 'brownish' >>> max(len(x) for x in L) 8 Remain calm. Keep the faith. Guido's design works fine. No important use cases were left unserved by any() and all(). Raymond Hettinger -- http://mail.python.org/mailman/listinfo/python-list
Re: any() and all() Was: Pre-PEP: Dictionary accumulator methods
Ah OK, I stand corrected. Whoops. I just read the web page and thought the wrong thing, that makes sense. > Think about it. A key= function is quite a different thing. It provides a > *temporary* comparison key while retaining the original value. IOW, your > re-write is incorrect: > > >>> L = ['the', 'quick', 'brownish', 'toad'] > >>> max(L, key=len) > 'brownish' > >>> max(len(x) for x in L) > 8 > > > Remain calm. Keep the faith. Guido's design works fine. > > No important use cases were left unserved by any() and all(). > > > > Raymond Hettinger > > -- http://mail.python.org/mailman/listinfo/python-list