寻找一种方法,可以跳过多个for
循环,同时又能够获取当前的index
。
伪代码如下:
z = [1,2,3,4,5,6,7,8]
for element in z:
<calculations that need index>
skip(3 iterations) if element == 5
在Python 2中有这样的东西吗?
寻找一种方法,可以跳过多个for
循环,同时又能够获取当前的index
。
伪代码如下:
z = [1,2,3,4,5,6,7,8]
for element in z:
<calculations that need index>
skip(3 iterations) if element == 5
我会使用islice
来迭代iter(z)
,将不需要的元素删除...例如:
from itertools import islice
z = iter([1, 2, 3, 4, 5, 6, 7, 8])
for el in z:
print(el)
if el == 4:
_ = list(islice(z, 3)) # Skip the next 3 iterations.
# 1
# 2
# 3
# 4
# 8
优化
如果您跳过了很多次迭代,那么在那时将结果转换为列表将变得不够高效。尝试迭代消耗z
:
for el in z:
print(el)
if el == 4:
for _ in xrange(3): # Skip the next 3 iterations.
next(z)
感谢@Netwave的建议。
如果您还想要索引,请考虑在enumerate(z)
调用中包装iter
(对于python2.7....对于python-3.x,不需要iter
)。
z = iter(enumerate([1, 2, 3, 4, 5, 6, 7, 8]))
for (idx, el) in z:
print(el)
if el == 4:
_ = list(islice(z, 3)) # Skip the next 3 iterations.
# 1
# 2
# 3
# 4
# 8
z = [1,2,3,4,5,6,7,8]
i = 0
while i < len(z):
# ... calculations that need index
if i == 5:
i += 3
continue
i += 1
for _ in xrange(3): next(z)
,顺便说一下,不需要使用iter
,因为islice
已经像一个迭代器一样行事了。 - Netwavenext
,然后是list(islice(...))
作为一种教育性的替代方案。 - jpp