【问题标题】:C++ for loop nested statements to pythonC ++ for循环嵌套语句到python
【发布时间】:2019-04-22 06:17:58
【问题描述】:

如何将以下 C++ for 循环转换为 python for 循环?

for(i = xSize - 1; i >= 0 && ptr.points[i] > temp; i--){
    doSomething;
}

由于 and 运算符,我遇到了麻烦。没有它,我知道它会像

for i in range(xSize - 1, 0, -1)

这是等价的吗?

for i in range(xSize - 1, 0, -1):
    if ptr.points[i] > temp:
        doSomething

【问题讨论】:

  • 一旦条件变为假就跳出循环:for i in range(xSize-1, 0, -1): if i < 0 or ptr.points[i] <= temp: break else: doSomething
  • 谢谢,但为什么要使用否定呢?有优势吗?
  • 它们应该是等价的。有关更多解释,请参阅我发布的答案(没有否定)。

标签: python c++ for-loop


【解决方案1】:

Python 本身不支持这种操作。

不过,你的直觉是对的。您可以按照您的说法编写,但正如@François Andrieux 正确说明的那样,您还应该提供break 子句。

另外,你应该看看标准库提供的itertools 模块。它提供了广泛的函数来处理高效的循环。

from itertools import takewhile, count 
for i in takewhile(lambda i:i > 0 and i<xSize -1 and ptr.Points[i] > temp, i = i-1): doSth()

【讨论】:

  • 我不是 Python 专家,但在我看来,循环的 Python 版本将遍历所有范围,并简单地跳过与谓词一致的那些。当找到第一个这样的值时,c++ 循环结束,因此即使将来的值不匹配它,它们也会被“跳过”。
  • 是的,没错。感谢您的完成,我也完成了包括您的观察在内的答案
【解决方案2】:

一个C++ for循环的流程大致是:

for ( initialize; condition; increment/decrement ) {
   doSomething;
}

一旦条件计算为false,执行将跳出循环。在您的示例中,条件为i &gt;= 0 &amp;&amp; ptr.points[i] &gt; temp,这意味着如果i 的值变为负数或ptr.points[i] &lt;= temp,您将跳出循环。

因此你可以等效地写:

for(int i = xSize - 1; i >= 0; i--){
    if(ptr.points[i] > temp) {
        doSomething;
    }
    else {
        break;
    }
}

其中,很容易转换为python

for i in range(xSize-1, 0, -1): 
    if i >= 0 and ptr.points[i] > temp: 
        doSomething
    else:
        break

(虽然你并不真的需要i &gt;= 0 检查)

【讨论】:

  • 感谢您的回复。在你使用的python if 语句中,我相信这是一个错字,对吧?
  • @paul 确实是一个错字。修复。另请注意,这与您在问题中发布的内容不同,因为您的版本不会跳出循环。
【解决方案3】:

我认为这应该可以作为一个while循环并且直观,恕我直言

i=xSize-1
while True:
    if ptr.points[i] > temp:
        doSomething 
    else:
        break
    i-=1

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 2019-06-05
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多