繁体   English   中英

在 Python 中,如何在 while 循环中重新启动 for 循环? 最远的循环是在 r < y(integer 列表的长度)时运行的 while 循环

[英]In Python, how do I restart a for loop within a while loop? The furthest out loop is a while loop that runs while r < y(length of integer list)

integer 列表本质上是一个随机的 integer 列表,其中大部分是 excel 文件中的整数,但我想识别一些零块。 前任。 [3,3,3,0,0,4,0,6,0,0,7]。 我只想遍历列表以便可以打印:第一个零块从索引 3 开始,到索引 4 结束,第二个块等。

该列表是 excel 中的单列,跨越数千行。

我这样做的方式是使用以下代码:

r = 1
while r+1000 < y:
   for q in range(r,y-1):
      if sheet.cell_value(q,3) == '0':
          start = q
          print(str(start))
          for e in range(q,y-1):
              if sheet.cell_value(e,3) != 0:
                  r = e
                  print(str(end))
                  break
          break

打印件在那里,所以我可以检查它是否正确。 但是现在 output 中发生的事情是它永远不会停止并且只打印起始值。

您可以执行与此类似的操作来获取每组 0 的开始和结束位置的列表。

>>> li = [3,3,3,0,0,4,0,6,0,0,7]
>>> tracking_zeros = False
>>>
>>> for i, n in enumerate(li):
...     if n == 0:
...         if not tracking_zeros:
...             print(f"start zeros: {i}")
...             tracking_zeros = True
...     else:
...         if tracking_zeros:
...             print(f"  end zeros: {i}")
...             tracking_zeros = False
...             
start zeros: 3
  end zeros: 5
start zeros: 6
  end zeros: 7
start zeros: 8
  end zeros: 10

不计算单个零:

>>> tracking_zeros = False
>>>
>>> for i, n in enumerate(li):
...     if n == 0:
...         if not tracking_zeros and li[i+1] == 0:
...             print(f"start zeros: {i}")
...             tracking_zeros = True
...     else:
...         if tracking_zeros:
...             print(f"  end zeros: {i}")
...             tracking_zeros = False
...             
start zeros: 3
  end zeros: 5
start zeros: 8
  end zeros: 10

如果列表中的最后一项是 0,则会引发索引错误,因此您可能需要考虑这一点。

在执行循环以防止这种情况发生之前,append 最后可以是一个非零值: li.append(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM