给定一个可能在循环中间调用的迭代器,我希望能够增加从循环内部枚举内部计数。
lst = ["a", "b", "c", "d"]
lst_iter = iter(lst)
for index, elem in enumerate(lst_iter, start=1):
print(index, elem)
if elem == "b":
print(next(enumerate(lst_iter, start=index)))
输出
(1, 'a')
(2, 'b')
(3, 'c')
(3, 'd')
我想永久更新for循环枚举计数。
我可以用偏移来有效地完成同样的事情。
offset = 0
for index, elem in enumerate(lst_iter, start=1):
if elem == "b":
print(next(enumerate(lst_iter, start=index)))
offset = offset + 1
print(index + offset, elem)
但是我想知道是否有可能放弃偏移量并且每次next
上调用iter
时增量枚举内部计数器?
答案 0 :(得分:3)
听起来你想要保存enumerate
返回的迭代器而不是iter(lst)
的迭代器。通过这种方式,您可以在迭代器上调用next
并让for
循环跳过您提前查看的索引和值:
lst = ["a", "b", "c", "d"]
enum_iter = enumerate(lst, start=1)
for index, elem in enum_iter:
print(index, elem)
if elem == "b":
index2, elem2 = next(enum_iter)
print(index2, elem2, "*")
此代码打印的元组的顺序与if elem == "b"
块不存在的顺序完全相同,但"b"
之后的值将打印出额外的后缀:
1 a
2 b
3 c *
4 d
请注意,如果您的列表可能以b
值结尾,则应该添加一些额外的代码以捕获StopIteration
将引发的next
异常。