Как проверить, есть ли элемент в списке Python?
Мне нужно понять, содержится ли определённое значение в списке. Пишу циклы с флагом found, но это громоздко. Есть ли короткий способ проверить наличие элемента? И правда ли, что для больших данных это медленно?
1 ответ
Циклы с флагом не нужны — есть оператор 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).