← Все вопросы

Как проверить, есть ли элемент в списке Python?

Задан 18 месяцев назад381 просмотров1 ответ
8

Мне нужно понять, содержится ли определённое значение в списке. Пишу циклы с флагом found, но это громоздко. Есть ли короткий способ проверить наличие элемента? И правда ли, что для больших данных это медленно?

1 ответ

12
✓ Принятый ответ — помог автору

Циклы с флагом не нужны — есть оператор in, он возвращает True или False:

fruits = ['яблоко', 'банан', 'вишня']
print('банан' in fruits)      # True
print('киви' in fruits)       # False
print('киви' not in fruits)   # True

Работает в условиях напрямую:

if 'банан' in fruits:
    print('есть')

Про скорость — да, для списка in проходит элементы по очереди, это O(n): на миллионе элементов и частых проверках будет медленно. Если вы много раз проверяете наличие, переведите данные в set — там проверка почти мгновенная, O(1):

fruits_set = set(fruits)
print('банан' in fruits_set)   # True, но намного быстрее на больших данных

Правило: разовая проверка по списку — in по списку нормально; тысячи проверок по большой коллекции — сначала set.

Частая ошибка — путать проверку элемента и проверку подстроки. Для строк in ищет подстроку ('an' in 'банан' это True), а для списка ищет целый элемент ('ябл' in fruits это False, потому что такого элемента целиком нет).

Для словаря key in my_dict проверяет наличие ключа — тоже быстро, O(1).

Ваш ответ

, чтобы ответить на вопрос.