Поиск элемента в списке Python

Поиск элемента в списке Python

Сегодня я расскажу, как проверить, содержит ли список элемент с помощью разных операторов в Python.

Используя цикл for

В качестве примера, я буду использовать список строк, содержащих несколько животных:

animals = ['Dog', 'Cat', 'Bird', 'Fish']

Простой и рудиментарный метод проверки, содержит ли список элемент: наш метод проходит через элемент и проверяет, соответствует ли элемент, на котором мы находимся, тому, который мы ищем. Давайте для этого воспользуемся циклом for:

for animal in animals:
     if animal == 'Bird':
         print('Chirp!')

Вывод программы:

Chirp!

Используя оператор in

Теперь более лаконичным подходом было бы использование встроенного оператора in, но с оператором if вместо оператора for. В паре с if он возвращает True, если элемент существует в последовательности или нет. Синтаксис оператора in выглядит следующим образом:

element in list

Используя этот оператор, мы можем сократить наш предыдущий код в один оператор:

if 'Bird' in animals: print('Chirp')

Вывод программы:

Chirp

Этот подход имеет ту же эффективность, что и цикл for, поскольку оператор in, используемый таким образом, вызывает функцию list.__contains__, которая по своей сути циклически проходит через список — хотя это гораздо читабельнее.

Используя оператор not in

Вы можете использовать оператор 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 по своей сути зацикливает список, чтобы проверить количество вхождений, и этот код приводит к запуску print:

Chirp

Заключение

В этой статье я рассмотрел несколько способов, как проверить, присутствует ли элемент в списке или нет. Я использовал цикл for, операторы in и not in, а также методы filter, any и count.

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Nataly1977

    Спасибо за контент))). Интересно! все коды программ рабочие

    Ответить
  2. RoJQ

    Стоит так же добавить что в случае с методом поиска через in будет проверяться не само совпадение слова с конкретным элементом листа, а само его присутствие как таковое в списке.

    If ‘Какое-то слово’ in [‘Паровоз’, ‘Ягода’, ‘КаркасКакое-то слово123’]:
    print(«Это и следовало доказать!»)
    else:
    print(«Я не прав!»)

    Output:
    Это и следовало доказать

    Ответить
  3. igor

    Егорка исправь недочеты. За ранее спасибо.
    if animals.count(‘Bird’) > 0:

    Ответить
    1. Егор Егоров автор

      благодарю

      Ответить
  4. нина

    твой контент читают «чайники», кем я и являюсь. нужно и объяснять для чайников.
    if animals.count(‘Bird’) > 0: что такое &gt/ ноль — для чего. пойду читать дальше.

    Ответить
    1. Егор Егоров автор

      Это спецсимволы, они не должны были отображаться, не обращайте на них внимание)

      Ответить
  5. Александр

    Автор, ты сам то смотрел, как твой код выглядит на странице? 🙂
    http://joxi.ru/n2Yl7ExT7pOLam
    А так да, спасибо за инфу, помогло.

    Ответить
    1. Егор Егоров автор

      Спасибо, да, я знаю о этой проблеме.

      Ответить
  6. Габриэлла

    Ух ты, сколько способов крутых и полезных. С таким успехом, можно с лёгкостью узнать , присутствие / отсутствие элемента , мне нравится лёгкость и доступность повествования. Лямбда способ конечно впечатляет, как по мне , это очень хитро , умно и продуманно с глубоким смыслом. Интересная статья, спасибо

    Ответить
    1. Егор Егоров автор

      пожалуйста!

      Ответить