Определение позиции элемента в списке и строке Python

Раздел: Работа с коллекциями -> Операции со списками

Основные способы получения индекса элемента

Метод index() – базовый и самый производительный способ получить индекс первого вхождения элемента в список или строку. Он возвращает целое число – позицию элемента, начиная с 0. Если элемент отсутствует, возникает исключение ValueError. Метод поддерживает необязательные аргументы start и end для поиска в срезе.


# Пример для списка
numbers = [10, 20, 30, 40, 20, 50]
idx = numbers.index(20)
print(idx)  # 1

Python list element (получение элемента списка в python)

1

Python list extend (метод extend для списка)


# Пример для строки
text = "Привет, мир!"
idx = text.index("мир")
print(idx)  # 8

Python empty list (создание пустого списка)

8

Python list slice (срезы списков в python)

Типичная ошибка:

Если элемент отсутствует в коллекции, метод index() выбрасывает ValueError. Чтобы избежать аварийного завершения, следует либо предварительно проверять наличие с помощью оператора in, либо перехватывать исключение.


# Пример с проверкой
if 100 in numbers:
    idx = numbers.index(100)
else:
    idx = None

Python list function (функции для работы со списками)

Как получить все индексы вхождения элемента в список?

Для поиска всех позиций элемента удобно использовать цикл с enumerate() или генератор списка. Каждый вариант выбирается в зависимости от читаемости и производительности.


# Через цикл
numbers = [1, 2, 3, 2, 4, 2]
indices = []
for i, val in enumerate(numbers):
    if val == 2:
        indices.append(i)
print(indices)  # [1, 3, 5]

Python добавить элемент в массив (добавление элемента в конец списка (append) в python)

[1, 3, 5]

элемент двумерного массива python (доступ к элементу двумерного массива (списка списков) в python)


# Через списковое включение
indices = [i for i, val in enumerate(numbers) if val == 2]
print(indices)  # [1, 3, 5]

Python обратиться к элементу списка (обращение к элементу списка по индексу в python)

[1, 3, 5]

как заменить элемент в списке python (замена элемента в списке по индексу (list[2] = new_value) в python)

Важный нюанс:

При поиске в строке символы сравниваются по значению Unicode. Регистр имеет значение. Для регистронезависимого поиска следует предварительно привести строку к одному регистру с помощью lower() или upper().

Как найти индекс подстроки в строке без исключения при отсутствии?

Метод str.find() работает аналогично index(), но при отсутствии подстроки возвращает -1, а не вызывает ошибку. Это удобно для безопасного поиска.


text = "Python 3 – мощный язык"
pos = text.find("Java")
print(pos)  # -1
pos = text.find("язык")
print(pos)  # 16

количество элементов массива python (количество элементов в списке (массиве) с помощью len в python)

-1
16

Python 3 индекс элемента (получение индекса элемента в списке/строке python 3)

Как использовать index() с указанием диапазона поиска?

Если нужно найти элемент только в определённой части списка или строки, применяются параметры start и end. Они принимают целые индексы начала и конца среза (end не включается).


# Поиск второго вхождения числа 20 в списке
numbers = [10, 20, 30, 20, 40]
first = numbers.index(20)           # 1
second = numbers.index(20, first+1) # 3
print(first, second)

Python максимальный элемент массива (поиск максимального элемента в списке с помощью max в python)

1 3

Python одинаковые элементы списков (поиск одинаковых (повторяющихся) элементов в списках python)

Как обработать отсутствие элемента без прерывания программы?

Использование try/except позволяет перехватить ValueError и продолжить выполнение. Это особенно полезно, когда элемент может отсутствовать, но необходимо выполнить другие действия.


try:
    idx = numbers.index(999)
    print(f"Индекс: {idx}")
except ValueError:
    print("Элемент не найден")

Find elements python (поиск элементов в списке по условию (list comprehension, filter) в python)

Элемент не найден

произведение элементов списка python (вычисление произведения элементов списка (через цикл или reduce) в python)

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

Для больших отсортированных списков линейный поиск неэффективен. Модуль bisect позволяет выполнять бинарный поиск. Функция bisect_left() возвращает позицию, на которую можно вставить элемент, сохраняя порядок; если элемент уже существует, она возвращает его индекс.


import bisect
sorted_list = [1, 3, 5, 7, 9]
idx = bisect.bisect_left(sorted_list, 5)
print(idx)  # 2
# Если элемент отсутствует
idx = bisect.bisect_left(sorted_list, 4)
print(idx)  # 2 (позиция вставки)

Python случайный элемент списка (выбор случайного элемента из списка (random.choice) в python)

2
2

Внимание:

Этот метод даёт индекс только если элемент присутствует. Для проверки наличия после bisect_left нужно сравнивать элемент по полученному индексу.

Расширенные примеры использования методов поиска индекса

Поиск индекса с помощью регулярных выражений в строке

Если требуется найти позицию вхождения по шаблону (например, все цифры или слово с опциями), используется модуль re. Метод re.search() возвращает объект Match, у которого есть метод start().

Пример

import re
text = "Цена: 1500 руб., скидка 10%"
match = re.search(r'\d+', text)
if match:
    print("Индекс первого числа:", match.start())  # 6
    print("Само число:", match.group())
Индекс первого числа: 6
Само число: 1500

Для поиска всех вхождений используется re.finditer(): он возвращает итератор объектов Match.

Пример

for m in re.finditer(r'\d+', text):
    print(f"Число {m.group()} на позиции {m.start()}")
Число 1500 на позиции 6
Число 10 на позиции 25

Получение индекса элемента в многомерном списке

Для вложенных списков (например, матриц) часто нужен кортеж индексов (строка, столбец). Можно использовать вложенные циклы.

Пример

matrix = [[1,2,3], [4,5,6], [7,8,9]]
target = 5
for i, row in enumerate(matrix):
    if target in row:
        j = row.index(target)
        print(f"Элемент {target} на позиции ({i}, {j})")
        break
Элемент 5 на позиции (1, 1)

Индекс элемента в массиве NumPy

Библиотека NumPy предоставляет высокопроизводительные массивы. Функция np.where() возвращает кортеж массивов индексов для всех вхождений.

Пример

import numpy as np
arr = np.array([10, 20, 30, 20, 40])
indices = np.where(arr == 20)[0]
print(indices)  # [1 3]
# Для двумерного массива
arr2d = np.array([[1,2],[3,2]])
rows, cols = np.where(arr2d == 2)
print(list(zip(rows, cols)))  # [(0,1), (1,1)]
[1 3]
[(0,1), (1,1)]

Поиск индекса элемента с пользовательским условием (функция-предикат)

Иногда нужно найти индекс первого элемента, удовлетворяющего сложному условию. Для этого применяется next() с генераторным выражением.

Пример

items = ["apple", "banana", "cherry", "date"]
# Найти индекс первого элемента, длина которого больше 5
idx = next(i for i, val in enumerate(items) if len(val) > 5)
print(idx)  # 1 (banana)
1

Осторожно:

Если ни один элемент не удовлетворяет условию, next() вызовет StopIteration. Чтобы избежать этого, передайте второй аргумент – значение по умолчанию (например, -1).

Пример

idx = next((i for i, val in enumerate(items) if len(val) > 10), -1)
print(idx)  # -1
-1

Индексы всех элементов, отвечающих условию, с помощью numpy или pandas

Для больших данных удобно использовать pandas Series. Метод .index.tolist() возвращает индексы, где значение равно заданному.

Пример

import pandas as pd
s = pd.Series([1,2,3,2,4])
indices = s[s == 2].index.tolist()
print(indices)  # [1, 3]
[1, 3]

Поиск индекса в строке с учётом перекрывающихся вхождений

Метод str.find() не находит перекрывающиеся подстроки. Для этого требуется ручной цикл с динамическим сдвигом.

Пример

text = "aaaa"
pattern = "aa"
start = 0
indices = []
while True:
    pos = text.find(pattern, start)
    if pos == -1:
        break
    indices.append(pos)
    start = pos + 1  # сдвиг на 1 для перекрытия
print(indices)  # [0, 1, 2]
[0, 1, 2]

Получение индекса элемента в списке/строке Python 3 - comments

En
Python 3 индекс элемента (python)