python在迭代器中重复列表元素
有没有办法创建一个迭代器来重复列表中的元素?例如,给出了一个列表:python在迭代器中重复列表元素,python,itertools,Python,Itertools,有没有办法创建一个迭代器来重复列表中的元素?例如,给出了一个列表: color = ['r', 'g', 'b'] 有没有办法以itertools.repeatlist(color,7)的形式创建一个迭代器,它可以生成以下列表 color_list = ['r', 'g', 'b', 'r', 'g', 'b', 'r'] 您可以与一起使用来构建repeatlist()函数: from itertools import cycle, islice def repeatlist(it, co
color = ['r', 'g', 'b']
有没有办法以itertools.repeatlist(color,7)
的形式创建一个迭代器,它可以生成以下列表
color_list = ['r', 'g', 'b', 'r', 'g', 'b', 'r']
您可以与一起使用来构建repeatlist()
函数:
from itertools import cycle, islice
def repeatlist(it, count):
return islice(cycle(it), count)
这将返回一个新的迭代器;如果必须有列表对象,请对其调用list()
演示:
您可以与一起使用来构建repeatlist()
函数:
from itertools import cycle, islice
def repeatlist(it, count):
return islice(cycle(it), count)
这将返回一个新的迭代器;如果必须有列表对象,请对其调用list()
演示:
循环
的文档说明:
注意,工具箱的这个成员可能需要大量的辅助存储(取决于iterable的长度)
我很好奇为什么python没有提供更高效的实现:
def cycle(it):
while True:
for x in it:
yield x
def repeatlist(it, count):
return [x for (i, x) in zip(range(count), cycle(it))]
这样,您就不需要保存列表的整个副本。如果列表无限长,它就可以工作。循环的文档说明: 注意,工具箱的这个成员可能需要大量的辅助存储(取决于iterable的长度) 我很好奇为什么python没有提供更高效的实现:
def cycle(it):
while True:
for x in it:
yield x
def repeatlist(it, count):
return [x for (i, x) in zip(range(count), cycle(it))]
这样,您就不需要保存列表的整个副本。如果列表无限长,它就会工作。正是我想要的!谢谢正是我想要的!谢谢在你问这个问题之前,你真的试过阅读itertools文档吗?@Padraiccningham:注意,另一个问题会重复整个周期;所以这里的OP需要满足于3的倍数。@MartijnPieters,,这与您自己的答案几乎相同。@Padraiccningham:对,我错过了那个。然而,这里的问题完全不同,从技术上讲,这个问题的答案是错误的。在你提出这个问题之前,你真的读过itertools文档吗?@Padraiccningham:注意,另一个问题确实会重复整个周期;所以这里的OP需要满足于3的倍数。@MartijnPieters,,这与您自己的答案几乎相同。@Padraiccningham:对,我错过了那个。然而,这里的问题完全不同,从技术上讲,这个问题的答案是错误的。因为
itertools.cycle
接受一个iterable
,它可能是一个只能通过一次生成的生成器,例如map
对象。一旦它耗尽,您就无法再从中获取元素。因此,您的循环
将永远不会再次达到收益率x
,这使其成为一个无限循环。尝试print(*islice(cycle(map(int,“123”)),20))
,因为itertools.cycle
接受一个iterable
,它可能是一个只能通过一次生成的生成器,例如map
对象。一旦它耗尽,您就无法再从中获取元素。因此,您的循环
将永远不会再次达到收益率x
,这使其成为一个无限循环。尝试打印(*islice(cycle(map(int,“123”)),20))