我需要迭代循环列表,可能要迭代很多次,每次都从最后访问的项开始。
用例是一个连接池,客户端请求连接,迭代器检查指向的连接是否可用并返回,否则循环直到找到可用的连接。
在Python中我怎样才能做到这一点呢?
如果您需要立即创建一个最大为特定长度的结果列表,而不是按需迭代:有关一般技术,请参见Repeat list to max number of elements;有关Numpy特定技术,请参见How to replicate array to specific length array。
我需要迭代循环列表,可能要迭代很多次,每次都从最后访问的项开始。
用例是一个连接池,客户端请求连接,迭代器检查指向的连接是否可用并返回,否则循环直到找到可用的连接。
在Python中我怎样才能做到这一点呢?
如果您需要立即创建一个最大为特定长度的结果列表,而不是按需迭代:有关一般技术,请参见Repeat list to max number of elements;有关Numpy特定技术,请参见How to replicate array to specific length array。
9条答案
按热度按时间63lcw9qa1#
使用
itertools.cycle
,这就是它的确切用途:输出:
(显然,永远循环)
为了手动推进迭代器并逐个从其中取出值,只需调用
next(pool)
:avwztpqn2#
正确的答案是使用itertools.cycle,但是,让我们假设这个库函数不存在,你将如何实现它呢?
使用生成器:
然后,可以使用
for
语句进行无限迭代,也可以调用next()
从生成器迭代器中获取下一个值:klh5stk13#
或者你可以这样做:
打印a B c d e f a b c...永远
d6kp6zgx4#
你可以用
append(pop())
循环来完成这个任务:或
for i in range()
循环:或者简单地说:
所有这些打印:
在这三种方法中,我倾向于使用append(pop())方法作为函数
fhity93d5#
如果你想循环
n
次,实现ncycles
itertools方法:wi3ka0sx6#
您需要一个定制的迭代器--我将改编this answer中的迭代器。
oxosxuxt7#
为了避免无限循环,我使用了数组的长度来迭代,直到列表的大小是两倍。你可以实现你自己的前置条件。想法是避免无限循环。
bprjcwpo8#
kninwzqo9#
对于那些可能感兴趣的人。从给定索引开始向前或向后循环: