Как создать цикл for, где значение переменной равно стоп-значению диапазона, когда цикл работает до конца в Python?
У меня возникла концептуальная проблема, переносящая это с C на Python:
int p;
for (p = 32; p < 64; p += 2) {
if (some condition)
break;
do some stuff
}
return p;
Преобразование цикла в for p in range(32,64,2)
не работает. Это происходит потому, что после окончания цикла p
равен 62 вместо 64.
Я могу сделать это с помощью цикла while
:
p = 32
while p < 64:
if (some condition):
break
do some stuff
p += 2
return p
Но я ищу Pythonic way.
Ответы
Ответ 1
вы можете использовать else
для цикла for
в случае, если условие не выполняется, чтобы добавить 2, как в цикле C:
for p in range(32, 64, 2):
if some_condition:
break
else:
# only executed if for loop iterates to the end
p += 2
Ответ 2
Расширьте диапазон, но включите второе условие "избыточного" прерывания.
for p in range(32, 65, 2):
if p >= 64 or (some condition):
break
# do stuff
(Единственное существенное различие между этим и Ответом Jean-François Fabre - это тот фрагмент логики, который вы дублируете: тестирование, если p
вне диапазона, или приращение p
.)
Ответ 3
Вариант chepner answer, который позволяет избежать дублирования теста, заключается в использовании itertools.count
:
import itertools
for p in itertools.count(32, 2):
if p >= 64 or (some condition):
break
do some stuff
return p
хотя я думаю, что это может быть и так:
p = 32
while True:
if p >= 64 or (some condition):
break
do some stuff
p += 2
return p
и, как указал tobias_k, затем тривиально преобразуется в:
p = 32
while p < 64 and not (some condition):
do some stuff
p += 2
return p
который я лично считаю более понятным.