Функция поиска последовательности в Python

Как мне найти объект в последовательности, удовлетворяющей определенному критерию?

Понимание и фильтрация списка проходят по всему списку. Единственная альтернатива - это ручной цикл?

mylist = [10, 2, 20, 5, 50]
find(mylist, lambda x:x>10) # Returns 20
27
задан Peter Mortensen 27 July 2018 в 07:24
поделиться

1 ответ

Вот шаблон, который я использую:

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')
35
ответ дан 28 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: