Есть ли более чистый способ обработки (последовательного) эксклюзивного оператора if в цикле for? - PullRequest
0 голосов
/ 19 мая 2019

Я новичок в Python (я только использовал C), и я обнаружил новые циклы, такие как for / else ... Так что мне интересно, игнорирую ли я более чистый способ обработки этого цикла:

flag = 0
for i in range (n):
    if not flag and condition:
        statement_1
        flag = 1
    if flag and condition:
        statement_2

Мне нужно сохранить счет для подсчета, потому что я знаю, что хотя бы один элемент будет удовлетворять условию, поэтому, когда я его найду, я сделаю Statement_1. Тогда, если другой элемент также будет удовлетворять условию, я сделаю Statement_2.

1 Ответ

0 голосов
/ 19 мая 2019
flag = False  # I prefer booleans
for i in range(n):
    if condition(i):  # We always need it to be True
        if not flag:
            statement(i)
            flag = True
        else:
            statement2(i)

Пока это будет работать, но так как вы сказали, что есть хотя бы один, удовлетворяющий условию

foo = range(n) # any iterable
iterfoo = iter(foo)
initial_value = next(i for i in iterfoo if condition(i))
statement(initial_value)
for i in iterfoo:
    if condition(i):
        statement2(i)

Теперь оба эти (если я что-то не упустил) должны выполнитьТо же самое, просто по-разному, так что это ваш выбор, хотя он также экономит вам 2 строки кода, так как вы не будете делать первую строку в вашем фактическом коде, поэтому я голосую за второй фрагмент: D

...