有没有办法让地图对象重复?

PyP*_*lia 1 python

假设我有一个 map object: map(lambda x: int(x), "123"),但我想要 6 个项目,我希望1,2,3,1,2,3(注意我不想要列表格式,我会使用 next 来获取每个项目),但是一旦我得到一个 StopIteration 错误拉出3个项目。我确实有一个解决方法,但它并不像我想要的那么干净:

def MakeMap(): return map(lambda x:int(x), "123")
mapped=MakeMap()
for i in range(6):
     try:
         print(next(mapped))
     except StopIteration:
         mapped=MakeMap()
         print(next(mapped))
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但如上所述,我希望它像以下一样简单:

mapped=map(lambda x:int(x), "123")
for i in range(6):
    print(next(mapped))
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Tim*_*ers 8

itertools.cycle 是(无限期)重复任何迭代器序列的一般方法。

>>> from itertools import cycle
>>> mapped = cycle(map(int, "123"))
>>> for i in range(6):
...    print(next(mapped))
1
2
3
1
2
3
Run Code Online (Sandbox Code Playgroud)

请注意另一个变化: lambda x: int(x)有效,但是拼写普通 old 是一种昂贵且晦涩的方式int