Идиоматичный способ предпринять действия при попытке цикл над пустой итерацией

Предположим, что я перебираю итерацию и хотел бы предпринять некоторые действия, если итератор пуст. Вот два лучших способа сделать это:

for i in iterable:
     # do_something
if not iterable:
    # do_something_else

и

empty = True
for i in iterable:
    empty = False
    # do_something
if empty:
    # do_something_else

Первый из них зависит от того, что итерируемое является коллекцией (поэтому бесполезно, когда итерируемое передается в функцию / метод, где находится цикл). а второй устанавливает пустым при каждом проходе по петле, что выглядит некрасиво.

Есть ли другой способ, по которому я скучаю, или вторая альтернатива - лучшая? Было бы здорово, если бы было какое-то предложение, которое я мог бы добавить в оператор цикла, который бы обрабатывал это для меня так же, как , иначе заставит флаги not_found исчезнуть.


Я не ищу умных хаков. Я ищу ясный и питонический способ итерации по итерируемой и предпринять некоторые действия, если итерируемая пуста, что будет понятен любому опытному программисту на python. Если бы я мог сделать это без установки флага на каждой итерации, это было бы фантастически. Если не существует простой идиомы, которая делает это, тогда забудьте об этом.

5
задан tshepang 16 June 2014 в 21:32
поделиться