Как мне найти объект в последовательности, удовлетворяющей определенному критерию?
Понимание и фильтрация списка проходят по всему списку. Единственная альтернатива - это ручной цикл?
mylist = [10, 2, 20, 5, 50]
find(mylist, lambda x:x>10) # Returns 20
Вот шаблон, который я использую:
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
, если элемент не был найден. В большинстве случаев это, вероятно, хорошо. Вы запросили первый элемент, такого элемента не существует, и поэтому программа, вероятно, не может продолжаться.
Если, с другой стороны, вы действительно знаете, что делать в этом случае, вы можете указать значение по умолчанию 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')