Pythonic infinite for loop?
Peter Otten
__peter__ at web.de
Fri Apr 15 04:11:39 EDT 2011
More information about the Python-list mailing list
Fri Apr 15 04:11:39 EDT 2011
- Previous message (by thread): Pythonic infinite for loop?
- Next message (by thread): Pythonic infinite for loop?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Paul Rubin wrote: > Chris Angelico <rosuav at gmail.com> writes: >>> sentinel = object() >>> seq = (dct.get('Keyword%d'%i,sentinel) for i in count(1)) >>> lst = list(takewhile(lambda x: x != sentinel, seq)) >> >> If I understand this code correctly, that's creating generators, >> right? It won't evaluate past the sentinel at all? > > Right, it should stop after hitting the sentinel once. > >> That might well be what I'm looking for. A bit ugly, but efficient and >> compact. And I can bury some of the ugliness away. > > It occurs to me, operator.ne might be a little faster than the > interpreted lambda. Or operator.is_not as you are dealing with a singleton. You also need functools.partial: $ python -m timeit -s'sentinel = object(); predicate = lambda x: x != sentinel' 'predicate(None)' 1000000 loops, best of 3: 0.369 usec per loop $ python -m timeit -s'sentinel = object(); predicate = lambda x: x is not sentinel' 'predicate(None)' 1000000 loops, best of 3: 0.314 usec per loop $ python -m timeit -s'from functools import partial; from operator import ne; sentinel = object(); predicate = partial(ne, sentinel)' 'predicate(None)' 1000000 loops, best of 3: 0.298 usec per loop $ python -m timeit -s'from functools import partial; from operator import is_not; sentinel = object(); predicate = partial(is_not, sentinel)' 'predicate(None)' 1000000 loops, best of 3: 0.252 usec per loop
- Previous message (by thread): Pythonic infinite for loop?
- Next message (by thread): Pythonic infinite for loop?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list