Message300830
Well, I could think of a way to still use repeat() here that also is pretty clean except for the fact that it fails if all inputs to zip_longest are repeat() iterators themselves (which would here lead to an empty iterator while it would otherwise lead to an infinite one):
def zip_longest(*args, **kwds):
# zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
fillvalue = kwds.get('fillvalue')
iterators = [iter(it) for it in args]
while True:
values = []
for i, it in enumerate(iterators):
try:
values.append(next(it))
except StopIteration:
values.append(fillvalue)
iterators[i] = repeat(fillvalue)
if all(isinstance(it, repeat) for it in iterators):
break
else:
yield tuple(values)
Keeping chain() in use here just for the sake of using it is not worth it, I believe. |
|
Date |
User |
Action |
Args |
2017-08-25 09:33:42 | rami | set | recipients:
+ rami, rhettinger, r.david.murray, docs@python |
2017-08-25 09:33:42 | rami | set | messageid: <1503653622.92.0.986650587072.issue31270@psf.upfronthosting.co.za> |
2017-08-25 09:33:42 | rami | link | issue31270 messages |
2017-08-25 09:33:42 | rami | create | |
|