【问题标题】:For exits loop before reaching range limit在达到范围限制之前退出循环
【发布时间】:2018-04-06 15:46:12
【问题描述】:

首先对任何常见的错误表示抱歉。我不是以英语为母语的人,而且我是 python 新手。

由于lug_par 是一个包含4 个项目的列表,第二个for 循环应该进行4 次迭代。在第三个for 循环中,if 的条件为真,因此它应该执行 break 并退出循环。我的问题是它没有进入第三次迭代,好像 len(lug_par) 是 2 而不是 4。它直接跳到 cont_y = cont_y + 1

import re

string = "R(95DHS(60PST_35FDP_05MTR)_05A(95DHS"

lug_par = [s.start() for s in re.finditer('\(', string)]
lug_par_cierra = [s.start() for s in re.finditer('\)', string)]

cont_y = 0
for i in (0, len(lug_par_cierra)):
    cont_x = 0
    for j in (0, len(lug_par)):
        if(lug_par[cont_x] > lug_par_cierra[cont_y]):
            c = lug_par.index(cont_x)
            borra = lug_par_cierra.index(c)
            break
        else:
            print lug_par[cont_x]
            cont_x = cont_x + 1
    cont_y = cont_y + 1

【问题讨论】:

  • 当我尝试运行它时,在第三次迭代中得到“IndexError: list index out of range”
  • 因为您可能正在迭代一个元组而不是一个范围?
  • 如果您不想在每个循环中迭代两次,则需要 range
  • 另外,您也没有使用ij(至少在此代码中没有)。为什么不直接遍历lug_par_cierralug_par?也许像,for _ in lug_par_cierra:

标签: python for-loop nested-loops


【解决方案1】:

我想你只是忘记了在for-loops 中对range() 的调用。更正后,它应该可以正常工作。

这里是更正后的code

import re

string = "R(95DHS(60PST_35FDP_05MTR)_05A(95DHS"
lug_par = [s.start() for s in re.finditer('\(', string)]
lug_par_cierra = [s.start() for s in re.finditer('\)', string)]
cont_y = 0

for i in range(0, len(lug_par_cierra)): #range() added
    cont_x = 0
    for j in range(0, len(lug_par)):    #range() added
        if(lug_par[cont_x] > lug_par_cierra[cont_y]):
            c = lug_par.index(cont_x)
            borra = lug_par_cierra.index(c)
            break
        else:
            print lug_par[cont_x]
            cont_x = cont_x + 1
    cont_y = cont_y + 1

【讨论】:

  • @Lafexlos 啊,是的,我也错过了那个!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多