Вот шаблон, который я использую:
mylist = [10, 2, 20, 5, 50]
found = next(i for i in mylist if predicate(i))
Или в Python 2.4 / 2.5 next()
не является встроенным:
found = (i for i in mylist if predicate(i)).next()
Обратите внимание, что next()
повышает StopIteration
, если элемент не был найден.В большинстве случаев это, вероятно, хорошо.Вы запросили первый элемент, такого элемента не существует, и поэтому программа, вероятно, не сможет продолжить работу.
Если, с другой стороны, вы do знаете, что делать в этом случае, выможет предоставить значение по умолчанию next():
conf_files = ['~/.foorc', '/etc/foorc']
conf_file = next((f for f in conf_files if os.path.exists(f)),
'/usr/lib/share/foo.defaults')