带有 itertools 的一行重复计数器?
One line repeating counter with itertools?
我想使用 itertools 编写一个无限生成器,它结合了 count
和 repeat
迭代器,通过在递增之前重复每个数字 n
次。有没有比我想出的更简洁的方法呢?
from itertools import *
def repeating_counter(times):
c = count()
while True:
for x in repeat(next(c), times):
yield x
>>> rc = repeating_counter(2)
>>> next(rc)
0
>>> next(rc)
0
>>> next(rc)
1
>>> next(rc)
1
使用整数除法!
def repeating_counter(times):
return (x // times for x in count())
虽然它不像 minitech 的回答那么优雅,但我认为您可以简化当前的逻辑,足以将函数体放在一行中:
def repeating_counter(times):
for x in count(): yield from repeat(x, times)
一个for
循环可以运行无限期地(就像一个while True
循环)如果它消耗的迭代器永远不会结束。 Python 3.3 中引入的 yield from
表达式使代码的内部循环变得不必要。如果您在使用 Python 的早期版本时遇到困难,则需要恢复该循环,我认为这将需要为该函数使用多行代码。
我想使用 itertools 编写一个无限生成器,它结合了 count
和 repeat
迭代器,通过在递增之前重复每个数字 n
次。有没有比我想出的更简洁的方法呢?
from itertools import *
def repeating_counter(times):
c = count()
while True:
for x in repeat(next(c), times):
yield x
>>> rc = repeating_counter(2)
>>> next(rc)
0
>>> next(rc)
0
>>> next(rc)
1
>>> next(rc)
1
使用整数除法!
def repeating_counter(times):
return (x // times for x in count())
虽然它不像 minitech 的回答那么优雅,但我认为您可以简化当前的逻辑,足以将函数体放在一行中:
def repeating_counter(times):
for x in count(): yield from repeat(x, times)
一个for
循环可以运行无限期地(就像一个while True
循环)如果它消耗的迭代器永远不会结束。 Python 3.3 中引入的 yield from
表达式使代码的内部循环变得不必要。如果您在使用 Python 的早期版本时遇到困难,则需要恢复该循环,我认为这将需要为该函数使用多行代码。