Вступление
В этом руководстве мы рассмотрим, как проверить, содержит ли список элемент или значение в Python . Мы будем использовать список строк, содержащий несколько животных:
animals = ['Dog', 'Cat', 'Bird', 'Fish']
Проверьте, содержит ли список элемент с циклом for
Простой и элементарный метод проверки, содержит ли список элемент,
проходит через него и проверяет, соответствует ли элемент, на котором мы
находимся, тому, который мы ищем. Давайте использовать for петли для
этого:
for animal in animals:
if animal == 'Bird':
print('Chirp!')
Этот код приведет к:
Chirp!
Проверьте, содержит ли список элемент с оператором in
Теперь, более succint подход будет использовать встроенные in
операторе, но с if заявлением вместо того , for утверждения. В паре
с if он возвращает True если элемент существует в последовательности
или нет. Синтаксис in выглядит так:
element in list
Используя этот оператор, мы можем сократить наш предыдущий код до одного оператора:
if 'Bird' in animals: print('Chirp')
Этот фрагмент кода выведет следующее:
Chirp
Этот подход имеет ту же эффективность, что и for , поскольку in ,
используемый таким образом, вызывает list.__contains__ , которая по
своей сути выполняет цикл по списку, хотя она намного более читабельна.
Проверьте, содержит ли список элемент, не в операторе
Напротив, мы можем использовать not in , который является логической
противоположностью оператора in Она возвращает True , если элемент
не присутствует в последовательности.
Давайте перепишем предыдущий пример кода, чтобы использовать оператор
not in
if 'Bird' not in animals: print('Chirp')
Выполнение этого кода ничего не даст, поскольку Bird присутствует в
нашем списке.
Но если мы попробуем это с Wolf :
if 'Wolf' not in animals: print('Howl')
Этот код приводит к:
Howl
Проверьте, содержит ли список элемент с лямбда
Другой способ проверить, присутствует ли элемент, - это отфильтровать
все, кроме этого элемента, точно так же, как просеивать песок и
проверять, остались ли в конце раковины. Встроенный filter() принимает
лямбда-функцию и список в качестве аргументов. Здесь мы можем
использовать лямбда-функцию, чтобы проверить нашу строку 'Bird' в
списке animals
Затем мы помещаем результаты в list() поскольку метод filter()
возвращает filter , а не результаты. Если мы упакуем filter в
список, он будет содержать элементы, оставшиеся после фильтрации:
retrieved_elements = list(filter(lambda x: 'Bird' in x, animals))
print(retrieved_elements)
Этот код приводит к:
['Bird']
Теперь это не самый эффективный подход. Это довольно медленнее, чем три
предыдущих подхода, которые мы использовали. Сам filter() эквивалентен
функции генератора:
(item for item in iterable if function(item))
Снижение производительности этого кода, помимо прочего, связано с тем, что мы в конце преобразуем результаты в список, а также выполняем функцию для элемента на каждой итерации.
Проверьте, содержит ли список элемент с помощью any ()
Еще один замечательный встроенный подход - использовать any() ,
которая является просто вспомогательной функцией, которая проверяет,
есть ли какие-либо (хотя бы 1) экземпляры элемента в списке. Он
возвращает True или False зависимости от наличия или отсутствия
элемента:
if any(element in 'Bird' for element in animals):
print('Chirp')
Поскольку это приводит к True , вызывается print()
Chirp
Этот подход также является эффективным способом проверки наличия элемента. Он так же эффективен, как и первые три.
Проверьте, содержит ли список элемент, используя count ()
Наконец, мы можем использовать count() чтобы проверить, присутствует
ли элемент:
list.count(element)
Эта функция возвращает вхождение данного элемента в последовательности. Если оно больше 0, мы можем быть уверены, что данный элемент находится в списке.
Проверим результаты функции count() :
if animals.count('Bird') > 0:
print("Chirp")
Функция count() своей сути выполняет цикл по списку для проверки
количества вхождений, и этот код приводит к:
Chirp
Заключение
В этом руководстве мы рассмотрели несколько способов проверить,
присутствует ли элемент в списке или нет. Мы использовали цикл for
in и not in , а также методы filter() , any() и count()