C ++ для циклических вложенных операторов в python - PullRequest
0 голосов
/ 19 ноября 2018

Как мне перевести следующий цикл C ++ for в цикл python for?

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

У меня проблемы из-за оператора и. Без этого я знаю, что это будет похоже на

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

Это эквивалент?

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

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Поток цикла 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 проверка)

0 голосов
/ 20 ноября 2018

Я думаю, что это должно быть хорошо как цикл while и интуитивно понятный, ИМХО

i=xSize-1
while True:
    if ptr.points[i] > temp:
        doSomething 
    else:
        break
    i-=1
0 голосов
/ 19 ноября 2018

Сам Python не поддерживает такую ​​операцию.

Однако ваша интуиция верна. Вы можете написать, как вы заявили, но, как правильно сказал @ Francois 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()
...