是否可以使用itertools限制迭代次数并将迭代器项存储在列表中?

时间:2019-04-10 16:43:08

标签: python matplotlib itertools

我有一堆线(总共超过50条)将出现在多个图中,并且我想使用许多标记来存储它们。 {,matplotlib中标记的数量被限制为行数超过了该数量。在花了一个小时在这里寻找答案之后,我发现itertools.cycle是潜在的解决方案,因为它可以让我循环浏览一系列文章。举例来说,我想循环显示五个标记:

import itertools    
markers = itertools.cycle(('o', 'D', '*', 'X', '+'))

但是,我很快意识到将循环限制为一定数量(即行数)并将其存储在列表中的必要性,因为这些行将出现在多个图中,并且我希望标记保持一致。我遇到了另一个问题(Is there an elegant way to cycle through a list N times via iteration (like itertools.cycle but limit the cycles)?),该问题似乎可以通过以下方式解决我的部分问题:

import itertools
n = 50 # number of lines
itertools.chain.from_iterable(itertools.repeat(['o', 'D', '*', 'X', '+'], n))

所以,现在我只需要找出问题的存储部分即可。

  • 如何限制迭代次数(似乎可以解决)并将它们作为项目存储在列表中?

如果itertools不是最方便的方法,那么如果有人可以将我指向更方便的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

因为itertools.chain是一个可迭代的对象,所以我只是在itertools.chain.from_iterable构造函数的结果上运行列表函数,如下所示:

import itertools
n = 50 # number of lines
list(itertools.chain.from_iterable(itertools.repeat(['o', 'D', '*', 'X', '+'], n)))

并在列表中得到结果。该列表的长度为250,因为它在整个系列中进行了50次迭代。

我希望这会有所帮助。

编辑:

当然,如果要使用列表,只需将变量设置为结果,如下所示:

var_name = list(itertools.chain.from_iterable(itertools.repeat(['o', 'D', '*', 'X', '+'], n)))