Поиск в списке: index(), count(), in

Поиск в списке: index(), count(), in Списки, словари, кортежи

Привет! Мы уже научились добавлять и удалять элементы из списков. Но как найти нужный элемент? Как узнать, есть ли он в списке? И как подсчитать, сколько раз он встречается?

В этой статье мы разберём:

  • index() — поиск индекса элемента
  • count() — подсчёт количества вхождений
  • in — проверка наличия элемента
  • not in — проверка отсутствия элемента

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный Python
  • Базовое понимание списков (статьи 1–3 в этом подменю)

Совет: Эти методы — основа работы с данными. Без них нельзя представить ни одну программу.

Основная часть

Оператор in

in проверяет, есть ли элемент в списке. Возвращает True или False.

fruits = ["яблоко", "банан", "вишня"]

print("банан" in fruits)    # True
print("апельсин" in fruits) # False

Совет: in — самый быстрый способ проверить наличие элемента.

if "банан" in fruits:
    print("Банан есть в списке")

Оператор not in

not in проверяет, что элемента нет в списке.

fruits = ["яблоко", "банан", "вишня"]

print("апельсин" not in fruits)   # True
print("банан" not in fruits)      # False
if "апельсин" not in fruits:
    print("Апельсина нет в списке")

Метод index()

index() возвращает индекс первого вхождения элемента.

fruits = ["яблоко", "банан", "вишня", "банан"]
position = fruits.index("банан")
print(position)   # 1

Важно: Если элемента нет — возникает ошибка ValueError.

# fruits.index("апельсин")   # ValueError: 'апельсин' is not in list

Безопасное использование:

if "банан" in fruits:
    position = fruits.index("банан")
    print(f"Индекс банана: {position}")

Совет: index() можно использовать с параметрами start и stop.

numbers = [1, 2, 3, 2, 4, 2, 5]
position = numbers.index(2, 3)    # Поиск с индекса 3
print(position)   # 5

Метод count()

count() подсчитывает, сколько раз элемент встречается в списке.

fruits = ["яблоко", "банан", "вишня", "банан", "банан"]
count = fruits.count("банан")
print(count)   # 3
numbers = [1, 2, 3, 2, 4, 2, 5]
count_2 = numbers.count(2)
print(count_2)   # 3

Совет: count() не вызывает ошибку, если элемента нет — просто возвращает 0.

print(fruits.count("апельсин"))   # 0

Сравнение методов

МетодЧто делаетВозвращаетОшибка
inПроверяет наличиеTrue/FalseНет
not inПроверяет отсутствиеTrue/FalseНет
index()Возвращает индексИндексValueError
count()Подсчитывает вхожденияЧислоНет

Примеры из реальной жизни

Пример 1. Проверка входа пользователя:

allowed_users = ["admin", "user1", "user2"]
username = "admin"

if username in allowed_users:
    print("Доступ разрешён")
else:
    print("Доступ запрещён")

Пример 2. Подсчёт голосов:

votes = ["за", "против", "за", "за", "против", "воздержался"]
for_votes = votes.count("за")
against_votes = votes.count("против")
abstained = votes.count("воздержался")
print(f"За: {for_votes}, Против: {against_votes}, Воздержались: {abstained}")

Пример 3. Поиск всех позиций элемента:

numbers = [1, 2, 3, 2, 4, 2, 5]
target = 2
positions = []

for i, num in enumerate(numbers):
    if num == target:
        positions.append(i)

print(positions)   # [1, 3, 5]

Задачи для закрепления

Задача 1. Проверь, есть ли число 5 в списке [1, 2, 3, 4, 5].

Задача 2. Найди индекс элемента «вишня» в списке fruits = ["яблоко", "банан", "вишня"].

Задача 3. Подсчитай, сколько раз встречается число 3 в списке [1, 2, 3, 2, 3, 4, 3].

Задача 4. Напиши безопасную функцию, которая возвращает индекс элемента, или -1, если элемента нет.

Задача 5. Найди все индексы элемента «банан» в списке ["яблоко", "банан", "вишня", "банан", "дыня"].

Ответы:

Задача 1.

numbers = [1, 2, 3, 4, 5]
print(5 in numbers)   # True

Задача 2.

fruits = ["яблоко", "банан", "вишня"]
print(fruits.index("вишня"))   # 2

Задача 3.

numbers = [1, 2, 3, 2, 3, 4, 3]
print(numbers.count(3))   # 3

Задача 4.

def safe_index(lst, item):
    if item in lst:
        return lst.index(item)
    return -1

print(safe_index([1, 2, 3], 2))   # 1
print(safe_index([1, 2, 3], 5))   # -1

Задача 5.

fruits = ["яблоко", "банан", "вишня", "банан", "дыня"]
target = "банан"
positions = []

for i, fruit in enumerate(fruits):
    if fruit == target:
        positions.append(i)

print(positions)   # [1, 3]

Нюансы и подводные камни

index() ищет только первое вхождение

numbers = [1, 2, 3, 2, 4, 2]
print(numbers.index(2))   # 1 (только первый)

Поиск с помощью цикла

Если нужно найти все вхождения, используй цикл или list comprehension.

numbers = [1, 2, 3, 2, 4, 2]
indices = [i for i, x in enumerate(numbers) if x == 2]
print(indices)   # [1, 3, 5]

count() для вложенных списков

nested = [[1, 2], [3, 4], [1, 2]]
print(nested.count([1, 2]))   # 2

Частые ошибки и как их избежать

Ошибка 1: index() на несуществующий элемент

Используй in перед вызовом index().

Ошибка 2: Путаница между count() и len()

  • len() — длина всего списка
  • count() — количество вхождений элемента

Ошибка 3: Поиск в пустом списке

empty = []
print(empty.index(5))   # ValueError

Проверяй список на пустоту перед поиском.

Шпаргалка

Что нужноКак пишется
Проверить наличиеitem in list
Проверить отсутствиеitem not in list
Найти индекс (первый)list.index(item)
Найти индекс с startlist.index(item, start)
Подсчитать вхожденияlist.count(item)
Безопасный поискif item in list: index = list.index(item)

Заключение / Выводы

Сегодня мы узнали:

  • in и not in — проверка наличия
  • index() — поиск индекса элемента
  • count() — подсчёт вхождений
  • Безопасные способы поиска

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×