我如何将以下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
答案 0 :(得分:0)
Python本身不支持这种操作。
但是,您的直觉是正确的。您可以按照您的陈述进行书写,但正如@FrançoisAndrieux正确陈述的那样,您还应该提供一个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()
答案 1 :(得分:0)
C ++ for循环的流程大致如下:
for ( initialize; condition; increment/decrement ) {
doSomething;
}
条件评估为false
后,执行将跳出循环。在您的示例中,条件为i >= 0 && ptr.points[i] > temp
,这意味着如果i
的值为负或ptr.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
检查)
答案 2 :(得分:0)
恕我直言,恕我直言,这应该是一会儿循环吧
jq-1.6 -n '[0,1,2,3] | (.[] |= if . == 2 then empty else . end)'
[
0,
1,
3,
null
]