【问题标题】:How to update value in main loop如何在主循环中更新值
【发布时间】:2017-02-28 08:15:40
【问题描述】:

我在for 循环中有while 循环。而且,我想将值lwhile 循环更新为for 循环。 因为,在这种情况下,例如:l==5 在 while 循环中,l==1for 循环中。

  for l in range(len(csvLines)):
     if ";" in str(csvLines[l][:2]):
         objectType = int(csvLines[l][:1])
         while objectType == 0:
             l = l+1
             if ";" in str(csvLines[l][:2]):
                 objectType = int(csvLines[l][:1])
             else:
                 objectType = int(csvLines[l][:2])
         else:
             pass
     else:
         objectType = int(csvLines[l][:2])

【问题讨论】:

  • 创建一个不同的变量,你是 l 正在重新定义,但我不太明白你在这里想要做什么

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


【解决方案1】:

您可以将l 更改为当前的for 迭代,但是一旦下一个for 迭代开始,l 就会被分配下一个值range。如果你想修改迭代索引,比如这样使用while

l = 0  # you have to initialize it manually
while l < len(csvLines):
   ...
   l += 1   # you have to increase it manually at the end of the current iteration

注意:在循环中增加l时,必须确保它仍然是&lt; len(csvLines),否则下次访问csvLines[l]会失败。

【讨论】:

  • 但我会在 Python 2 中避免这种情况 - 我会完全避免它 别介意 Python 版本... :)跨度>
  • range 在 python 3 中检查速度非常快。检查 Martijn Pieters 关于该主题的最佳帖子,让我在这里找到它:stackoverflow.com/questions/30081275/…
  • 一个简单的整数比较检查是 1) 更明显的意图和 2) 比范围对象上的成员资格测试更快......看起来 - OP 甚至不需要计数器变量,但我们暂时忽略它......
  • 好吧,没必要。但是 csvLines[l] 到处都需要计数器变量
  • 你真的不应该使用l in range(N) 进行这样的测试,因为如果l 曾经不是一个整数,你会突然把一个简单的 O(1) 检查变成一个慢O(N) 检查。坚持链式比较(或者简单的 &lt; 测试,如果你知道 l 不能低于 0),保证为 O(1) 并在 Python 3 中给你一个很好的 TypeError 创建一个错误,现在类型错误。
猜你喜欢
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
相关资源
最近更新 更多