如何在python中有条理地跳过for循环中的迭代步数?

alw*_*btc 1 python for-loop list

我们有一个清单item_list,

item_list = ["a", "b", "XYZ", "c", "d", "e", "f", "g"]
Run Code Online (Sandbox Code Playgroud)

我们使用for循环遍历其项目,如果是item "XYZ",则跳过项目"c", "d", "e"并继续"f":

for item in item_list:
    if item == "XYZ":
       do_something()
       skip_3_items() ----> skip items "c", "d", "e"
    else:
        do_something_else()
Run Code Online (Sandbox Code Playgroud)

什么可能是实现这一目标的最pythonic方式?

kin*_*all 7

list_iter = iter(item_list)

for item in list_iter:
    if item == "XYZ":
        do_something()
        for _ in range(3):   # skip next 3 items
            next(list_iter, None)

# etc.
Run Code Online (Sandbox Code Playgroud)

基本上,不是直接遍历列表,而是为它创建一个称为迭代器的抽象并迭代它.您可以通过调用next(...)我们三次跳过接下来的三个项来告诉迭代器前进到下一个项目.下一次循环,它会在之后的下一个项目中获取.

  • 而不是捕获StopIteration,因为你无论如何都忽略了这个值,你可以简单地使用默认的arg,例如`next(list_iter,None)` (3认同)
  • 你应该将这些`next`语句放在`try ...除了StopIteration`之外 (2认同)