[New-bugs-announce] [issue37671] itertools.combinations could be lazier

Antal Nemes report at bugs.python.org
Wed Jul 24 14:18:17 EDT 2019


New submission from Antal Nemes <thoneyvazul at gmail.com>:

Reproducible with current master (3.9, 151b91dfd21a100ecb1eba9e293c0a8695bf3bf5)

I would expect itertools.combinations to be lazy in the sense that it should not exhaust the input iterator in constructor time.

import itertools;
itertools.combinations(itertools.count(),2)

should return instantly. Instead it "hangs" until the process is killed.

Similarly, one can reproduce with the following simple crafted generator:

Python 3.9.0a0 (heads/master-dirty:151b91d, Jul 24 2019, 19:51:53) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def mygenerator_with_exception():
    yield 2
    yield 2
    yield 3
    raise Exception("Should not be raised")
... ... ... ... ... 
>>> g = mygenerator_with_exception()
>>> import itertools             
>>> itertools.combinations(g,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in mygenerator_with_exception
Exception: Should not be raised

Could you please consider making itertools.combinations truely lazy?

----------
components: Interpreter Core
messages: 348395
nosy: furiel
priority: normal
severity: normal
status: open
title: itertools.combinations could be lazier
type: behavior
versions: Python 3.5, Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue37671>
_______________________________________


More information about the New-bugs-announce mailing list