【问题标题】:python combine 'while loop' with 'for loop' to iterate through some datapython结合'while循环'和'for循环'来迭代一些数据
【发布时间】:2014-09-17 07:35:50
【问题描述】:

我正在尝试将 while 循环与 for 循环结合起来遍历某个列表,但我得到了无限循环。我的代码:

l=[0,2,3,4]
lo=0
for i in range(len(l)):
     while (True):
          lo+=1
     if lo+l[i]>40:
         break
     print(lo)

此代码导致无限循环。我想要条件lo+ l[i]大于40时的输出;它应该停止循环并打印最终的lo 输出作为结果。我尝试了打印行的所有缩进方法,但无法得到我想要的。提前致谢。

【问题讨论】:

  • 试着在纸上一步步深入,你会看到真正发生了什么,或者添加日志/打印来看看每一步发生了什么。
  • 目前还不清楚您要达到的目标。你想要什么输出?
  • 你应该尽量避免中断,它们通常会使代码更难理解。
  • 我正在尝试获取 lo 输出,因为不满足 l[i]>3 条件。

标签: python python-3.x for-loop while-loop


【解决方案1】:

你的 break 取消了内部循环

这将起作用:

l=[0,1,2,3,4] 
stop = False
lo=0 
while( not stop):
    lo+=1 
    for i in range(len(l)):
        if not l[i]<3:
           stop = True
           break
        print(lo)

【讨论】:

    【解决方案2】:

    试试这个:

    l=[0,1,2,3,4]
    lo=0
    
    for i in l:
        lo+=1
        if not l[i]<3:
            break
        print(lo)
    

    【讨论】:

      【解决方案3】:

      你得到了无限循环,因为你编写了无限循环。您可能认为break 语句会以某种方式“神奇地”知道您不想只结束 for 循环,还想结束 while 循环。但是break 总是只会打破一个循环——最里面的一个。所以这意味着你的代码实际上是这样做的:

      while (True):               # <- infinite while loop
          lo += 1
          for i in range(len(l)): # <- for loop
              if not l[i] < 3:
                  break           # <- break the for loop
              print(lo)
          # while loop continues
      

      如果你想结束这两个循环,你必须明确地这样做——例如, 您可以使用布尔变量:

      keep_running = True
      while (keep_running):
          lo += 1
          for i in range(len(l)):
              if not l[i] < 3:
                  # this will effectively
                  # stop the while loop:
                  keep_running = False
                  break
              print(lo)
      

      【讨论】:

        【解决方案4】:

        您不需要外部无限循环,也不必自己管理索引(请参阅文档中的enumerate)。

        l = [0,1,2,3,4]
        for index, value in enumerate(l):
            if value >= 3:
                 break
            print(index)
        

        我将条件 if value not &lt; 3: 更改为 if value &gt;= 3: 以提高可读性。

        【讨论】:

          猜你喜欢
          • 2022-01-18
          • 1970-01-01
          • 2012-12-03
          • 1970-01-01
          • 1970-01-01
          • 2010-09-11
          • 2012-06-27
          • 2023-03-05
          • 1970-01-01
          相关资源
          最近更新 更多