У Python 2.6 або новіших версіях:
Якщо ви хочете StopIterationбути підвищеними, якщо не знайдено відповідного елемента:
next(x for x in the_iterable if x > 3)
Якщо ви хочете default_value(наприклад None) повернутись натомість:
next((x for x in the_iterable if x > 3), default_value)
Зауважте, що в цьому випадку вам потрібна додаткова пара дужок навколо генераторного виразу - вони потрібні, коли вираз генератора не є єдиним аргументом.
Я бачу, що більшість відповідей рішуче ігнорують nextвбудований, і тому я припускаю, що з якихось загадкових причин вони на 100% зосереджені на версіях 2.5 і пізніших версій - не згадуючи питання про версію Python (але тоді я не бачу цієї згадки в відповіді, в яких згадується nextвбудований, саме тому я вважав за потрібне дати відповідь сам - принаймні, питання про "правильну версію" записується таким чином ;-).
В 2.5 .next()метод ітераторів зростає, StopIterationякщо ітератор негайно закінчується, тобто для вашого випадку використання, якщо жоден елемент в ітерабетрі не відповідає умові. Якщо вам все одно (тобто ви знаєте, що має бути принаймні один задовільний елемент), тоді просто використовуйте .next()(найкраще в genexp, рядку для nextвбудованого в Python 2.6 і вище).
Якщо ви робите догляд, упаковка речей в функції , як ви вперше вказані в вашому Q здається кращим, і в той час як реалізація функції ви запропонували просто відмінно, можна альтернативно використовувати itertools, в for...: breakпетлю, або genexp, або try/except StopIterationяк тіло функції , як запропонували різні відповіді. Жодна з цих альтернатив не має великої доданої вартості, тому я б хотів отримати надзвичайно просту версію, яку ви вперше запропонували.