2

如何将以下 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
4

3 回答 3

0

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

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

一旦条件评估为false,执行将跳出循环。在您的示例中,条件是这意味着如果 的值变为负数或i >= 0 && ptr.points[i] > temp,您将跳出循环。iptr.points[i] <= 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 >= 0支票)

于 2018-11-19T20:52:31.813 回答
0

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()
于 2018-11-19T20:38:07.553 回答
0

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

i=xSize-1
while True:
    if ptr.points[i] > temp:
        doSomething 
    else:
        break
    i-=1
于 2018-11-19T21:08:24.860 回答