如何增加枚举内部计数器每次下一次(iter)调用?

时间:2015-02-18 04:17:02

标签: python

给定一个可能在循环中间调用的迭代器,我希望能够增加从循环内部枚举内部计数。

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时增量枚举内部计数器?

1 个答案:

答案 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异常。