【问题标题】:Possible to skip lines in a for statement?可以在 for 语句中跳过行吗?
【发布时间】:2020-11-12 16:42:19
【问题描述】:

是否可以在 for 语句中跳过行?即……

for line in xrange(len(lines)):
    if line is True and line+1 is True and line+2 is True
        do something....

我想在这之后的下一个 for 循环中跳到 line+3,因为我已经看过 line+1 和 line+2。

我已经将 continue 和 break 视为解决方案,但它们似乎并没有真正解决问题。

编辑 - 添加一些说明...... 我正在查看的数据(文本文件)不只是以 3 组的形式出现……我正在浏览足球比赛日志……举一个代码示例: 丹佛主场迎战堪萨斯城 堪萨斯城将球传回 20 码线 堪萨斯城进攻,Q1 和 15:00 还剩 堪萨斯城使用霰弹枪并获得 6 码 丹佛称之为一毛钱防守

最后 3 行基本上是一场比赛,会给我我需要的所有相关信息(进攻、防守、叫球、获得的码数等)......但前两行是开球,我没有想要处理这些行..

希望这将提供清晰。

【问题讨论】:

  • 如果您能更清楚地了解代码的总体用途,将会有所帮助。 lines 是什么?你想检测什么样的模式?假设if语句中的条件isn't满足;然后你应该尝试一个“重叠”的位置吗?或者您实际上想要始终考虑离散的 3 行集合中的源数据?因为在那种情况下,我可以向您推荐一个非常简洁的副本。

标签: python


【解决方案1】:

您可以每次将line 增加 3:

for line in xrange(len(lines), 3):

此外,由于xrange,您似乎正在使用 Python 2。除非您有特定的理由这样做,否则我建议您使用 Python 3,因为 Python 2 已被弃用。

在 Python 3 中,你可以这样写:

for line in range(len(lines), 3):

【讨论】:

    【解决方案2】:

    很确定这不会是最佳解决方案,但是

    for i in xrange(0,len(lines)-2,3):
        if lines(i) and lines(i+1) and lines(i+2):
            do something...
    

    xrange 将按 3 步执行,跳到第 3 行。

    【讨论】:

      【解决方案3】:

      你可以使用任何一个

      for line in xrange(2, len(lines)):
          # do something
      

      for line in xrange(len(lines)):
          if line < 2:
              continue
          # else, do something
      

      【讨论】:

        【解决方案4】:

        没有索引的pythonic解决方案

        import itertools as it
        
        lst = [True, True, True, False, True, True, True, True, True]
        glen = 3
        grouped = zip(*[iter(lst)]*glen)
        for g, i in zip(grouped, it.count()):
            if all(g):
                print(g, i)
        

        生产

        (True, True, True) 0
        (True, True, True) 2
        

        假设对布尔值True 的检查是通用的,即它可以是零、空列表等。如果它需要特定于值True,我们必须将调用更改为all

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-28
          • 2016-04-12
          相关资源
          最近更新 更多