Рубрики
Без рубрики

Самый питонический способ проверить, содержит ли список элемента

Стандартный способ проверки, если элемент существует в списке, – это использовать в ключевое слово. Например, «Алиса» в [1, «Алисе», 3] вернется истина, а то же возвращает false для ‘Bob’. Если вам необходимо проверить более сложные условия, используйте любое (условие (x) для X в списке) функция с выражением генератора. … Самый питонический способ проверить, содержит ли список элемент Подробнее »

Автор оригинала: Chris.

Стандартный способ проверки, если элемент существует в списке, – это использовать в ключевое слово. Например, «Алиса» в [1, «Алиса», 3] вернется Правда Пока то же самое возвращает false для «Боб» Отказ Если вам нужно проверить более сложные условия, используйте любое (условие (x) для x в списке) Функция с выражением генератора.

В этой статье вы не только узнаете самый питонический способ проверить членство для элемента в списке Python. Это также сделает вам лучший учебный кодер-преподавание некоторых ключевых концепций на практике, таких как выражения генератора и сложность выполнения. Так что держите чтение!

Проблема : Как проверить, содержит ли данный список данный элемент?

Пример : Вы хотите булевое выражение для замены функции заполнителя lst.contains (x) в следующем коде.

lst = [1, 'Alice', 3]
if lst.contains(x):
    # Do something

Посмотрите на следующие методы, которые выполняют это – некоторые лучше других!

Упражнение : Запустите код. Выясните для каждого метода, в этом случае вы будете использовать его!

Метод 1: Членство с ключевым словом «в»

Стандартный способ проверки, если элемент существует в списке, – это использовать в ключевое слово. (Для получения дополнительных ключевых слов, скачайте мою штуку Python ключевых слов.)

lst = [1, 'Alice', 3]
if 'Alice' in lst:
    print('yes')

Вывод – «Да» Потому что строковый элемент «Алиса» существует в списке.

Если вы попробуете то же самое со строкой «Боб» , не будет никакого вывода:

if 'Bob' in lst:
    print('Bob')

Python Отпечатки ничего к оболочке. Чтобы сделать эту работу, вы можете использовать дополнительные не в Оператор:

if 'Bob' not in lst:
    print('not Bob')

Выход будет «Не Боб» Потому что выражение «Боб» не в Льве оценивает Правда Отказ

Python внутренне управляет __sontains__ Способ определенного класса для проверки членства с в ключевое слово. Вы можете настроить его для себя Объекты перезаписывая метод. Вот яркий пример, который указывает на чрезвычайно полезную Python Trick :

class Everything:
    def __contains__(self, *elem, **k):
        return True

universe = Everything()
print('Bob' in universe)
# True

print('Alice' in universe)
# True

print(42 not in universe)
# False

Вы можете попробовать это сами в вашем интерактивном коде оболочку:

Упражнение : Изменить вселенную, чтобы она не содержит слова ‘война’ .

Метод 2: Установить преобразование + в

в Ключевое слово в списках ведет к Линейная сложность времени выполнения Отказ Другими словами, вам нужно выполнить до N Операции, чтобы проверить, существует ли элемент в списке с N элементы. Если в списке есть тысячи элементов, это может значительно повредить сложность выполнения вашего алгоритма – если вам нужно выполнить много проверок.

В этом случае намного лучше преобразовать список на множество и проверить членство в наборе, который имеет постоянную сложность времени выполнения, не имеет значения, насколько большой набор в том, что он стоит только постоянное количество операций для проверки, если элемент находится в нем Отказ

Вот код:

lst = [1, 'Alice', 3]
s = set(lst)

if 'Alice' in s:
    print('yes')

if 'Bob' in s:
    print('Bob')

if 'Bob' not in s:
    print('not Bob')

'''
yes
not Bob
'''

Выход точно такой же, как в предыдущих примерах в Метод 1 : код семантически эквивалентен. Единственное отличие состоит в том, что вы создаете Установить один раз (сложность линейной среды выполнения) и проверьте членство на множестве (постоянная сложность времени выполнения для каждой проверки). В целом, это делает ваш код до трех раз больше эффективно Отказ

Упражнение : Подумайте, почему это делает ваш код до трех раз более эффективным!

Способ 3: наивный для петли

Всегда есть наивный способ делать вещи. Иногда наивный подход также самый лучший. Но, в нашем случае, это худшее!

Вот наивный подход к использованию цикла для проверки, если элемент находится в списке:

lst = [1, 'Alice', 3]
for x in lst:
    if x == 'Alice':
        print('yes')
# yes

Код не кратко и нечитается. Кроме того, если элемент существует несколько раз в списке, условный код будет выполнен несколько раз. Однако, если это то, что вы хотите выполнить, это абсолютно жизнеспособный путь, и я бы рассмотрел его самым питонным способом выполнить сложное состояние для нескольких совпадений в списке.

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

Способ 5: Появление списка и условный поиск

Давайте посмотрим, как вы можете использовать Понимание списка Для выполнения простой операции для каждого сопоставительного элемента (а не просто возвращается True Если элемент существует хотя бы один раз в списке).

В следующем коде вы заменяете все вхождения строки «Алиса» с новой строкой 'x' для шифрование Отказ Приложение было бы новыми законами о конфиденциальности в Европе, которые требуют от вас анонимного использования определенных имен на вашей веб-странице.

lst = ['Alice', 'Alice', 'Bob', 42, 'Alice']
encrypt_alice = ['x' if x=='Alice' else x for x in lst]
print(encrypt_alice)
# ['x', 'x', 'Bob', 42, 'x']

Заявление о понимании списка ['x', если остальное x для x в lst] применяет . Тройное выражение «X», если еще х каждому элементу х В оригинале Список -И создает новый список с результатами. Вы можете использовать произвольные выражения для изменения элемента каждого списка или отфильтровывают определенные элементы из списка.

Связанная статья:

  • Как отфильтровать список в Python
  • Регулярное выражение – окончательное руководство

Метод 4: любой ()

Этот четвертый способ проверки членства вполне Pythonic, и он используется в некоторых практических базах кода. В любом случае, хорошо, если вы знаете какой-либо () метод в Python!

Любая (считать) Метод возвращает Правда Если хотя бы один элемент в ИТЕРИТЕЛЬНО оценивает Правда Отказ Вы можете думать об этом как о логично или операция. В сочетании с выражением генератора для динамически создания радостных логиков (чтобы проверить, применяется ли определенное условие к каждому элементу в списке), это мощный инструмент в вашем инструменте ремня.

lst = [1, 'Alice', 3]
if any(x=='Alice' for x in lst):
    print('yes')
# yes

Преимущество этого метода заключается в том, что он позволяет проверять произвольные сложные условия, а не просто проверять членство. Например, вы можете использовать Регулярные выражения Чтобы соответствовать всем строкам в вашем списке, начнем с символа «А» Отказ

Чтобы узнать о регулярных выражениях (сверхдержава обработки текстовой обработки, которая поможет вам быть более продуктивным в задачах обработки текста, таких как создание собственной поисковой системы) Проверьте мою новую интерактивную книгу «Самый умный способ учиться Python Regex» (Ссылка на страницу продажи книги)!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.