我有一个圆形阵列。我用以下内容创建了它:
from itertools import cycle
myArray = ['a','b','c','d']
pool = cycle(myArray)
现在我想在池中打印第n项,其中n可能大于4。通常,这将是模块化函数的简单使用,但从逻辑上讲,我认为Python有一个方法,它将知道池中元素的数量(本例中为4
),并自动应用模块化函数。
例如,1
st和5
th项是'a'
。所以,从逻辑上讲,我希望pool[0]
和pool[4]
能给我'a'
。
有这样的方法吗?
发布于 2015-12-26 22:55:28
列表无疑是可行的,但是如果您实际上有一个循环对象,并且希望第n个对象环绕,那么您可以使用islice
:
from itertools import cycle, islice
myArray = ['a','b','c','d']
pool = cycle(myArray)
print(next(islice(pool, 5)))
a
注意:一旦你调用next(islice
,你就开始循环这个列表,如果你真的想要不断地旋转,你可能实际上想要一个deque
发布于 2015-12-26 22:11:55
不,没有内置的方法来完成你想要做的事情。正如前面所建议的,您可以使用zip
,但这将涉及根据您的序列对结果进行索引,以及为您想要的项生成n
元素。
有时最简单的方法是最清晰的。使用模块化来完成你想要的东西。
def fetch_circular(n):
myArray = ['a','b','c','d']
return myArray[n % 4]
发布于 2015-12-26 22:16:19
我想你可能把数组和生成器搞混了。
就性能而言,数组的模块化功能是可行的。
循环是一个函数,它根据请求生成元素。它不是一个具有方便方法的循环类。您可以在文档中看到相应的实现,您可能会理解其背后的想法:
https://docs.python.org/2/library/itertools.html#itertools.cycle
https://stackoverflow.com/questions/34475644
复制相似问题