Python: Найти Индекс Всех Вхождений Элемента в Списке
В этом руководстве вы научитесь использовать Python для поиска индексов всех вхождений элемента в список. Во многих случаях Python позволяет легко найти первый индекс элемента в списке. Однако, поскольку списки в Python могут содержать повторяющиеся элементы, может быть полезно найти все индексы элемента в списке.
К концу этого урока вы узнаете:
Как найти индексы всех вхождений элемента в список Python, используя:
Для петель
Список понятий
NumPy и
more_itertools
Какой метод самый быстрый
Оглавление
Как работают индексы списков Python
Прежде чем перейти к тому, как получить индексные позиции всех элементов в списке Python, давайте ненадолго остановимся, чтобы понять, как индексируются списки Python. Поскольку списки Python упорядочены, их порядок сохраняется, если он явно не изменён.
Индексы списков в Python начинаются с 0 и продолжаются до длины списка минус один. Ниже приведено изображение, показывающее, как работают эти индексы списков в Python:
В следующем разделе вы узнаете, как использовать метод .index()
списка для нахождения индекса элемента в списке.
Как работает метод индексирования списка Python
В Python метод списка .index()
имеет три параметра:
Элемент для поиска
Индекс, начиная с которого идет поиск
Индекс для поиска до
Единственным обязательным аргументом является элемент, который нужно найти. По умолчанию Python будет осуществлять поиск по всему списку, если не указано иное.
Давайте посмотрим, как выглядит этот метод:
Рассмотрим пример. Мы можем загрузить список с различными элементами и найти индекс элемента, используя метод .index()
В приведенном выше примере мы использовали метод .index()
для нашего списка, чтобы найти индекс элемента 1
. Метод вернул значение 0
, что означает, что элемент находится на 0-й позиции. Однако мы знаем, что значение встречается в списке несколько раз.
Почему метод возвращает только первый индекс? Это особенность работы метода. Даже если элемент встречается более одного раза, возвращается только его первое вхождение.
В следующих разделах вы узнаете, как получить индексные позиции всех вхождений элемента в список.
Как получить индекс всех вхождений элемента в список Python с помощью цикла for и перечисления
Один из самых основных способов получения индексных позиций всех вхождений элемента в список Python - использование цикла for и функции enumerate Python. Функция enumerate используется для итерации по объекту и возвращает как индекс, так и элемент.
Исходя из этого, мы можем проверить, соответствует ли элемент искомому нами элементу. Если это так, мы можем добавить позицию индекса в другой список. Давайте посмотрим, как это работает на примере:
Давайте разберем, что мы здесь сделали:
Мы определили функцию, которая принимает список и элемент в качестве входных данных.
Функция затем проходит в цикле по результату функции
enumerate()
Если значение элемента совпадает с искомым элементом, соответствующий индекс добавляется в список.
В конце возвращается список всех индексов
Как получить индекс всех вхождений элемента в список Python с помощью more_itertools
Встроенная библиотека more_itertools
включает в себя множество полезных функций. Одной из таких функций является функция locate()
, которая принимает итерируемый объект и функцию для оценки.
Чтобы найти индексные позиции всех элементов, совпадающих с элементом, мы можем использовать лямбда-функцию, которая просто проверяет, равен ли этот элемент элементу, с которым мы хотим сравнить.
Давайте посмотрим на пример:
Давайте разберем, что мы здесь сделали:
Мы определили функцию, которая принимает список и элемент для поиска.
Функция использует функцию
locate()
для поиска в списке, который мы хотим исследовать, и лямбда-функцию, которая проверяет, равен ли каждый элемент искомому значению.В конце функция возвращает список результата
Как получить индекс всех вхождений элемента в список Python с помощью Numpy
NumPy значительно упрощает и ускоряет процесс поиска всех позиций элемента в списке. Для этого можно использовать функцию where()
. Функция where()
возвращает позиции индексов всех элементов в массиве, которые соответствуют заданному значению.
Давайте посмотрим на пример:
Давайте разберем, что мы здесь сделали:
Мы создали функцию, которая принимает список и элемент, который нужно найти.
Список преобразован в массив numpy
Функция
where()
используется для проверки соответствия элемента массиву.Мы возвращаем 0-й индекс полученного массива
Мы конвертируем этот массив в список
Как получить индекс всех вхождений элемента в список Python с пониманием списка
В этом разделе мы рассмотрим, как использовать генератор списка для возвращения списка индексов элемента в списке. Этот метод работает так же, как и первый метод, цикл for, кроме использования генератора списка.
Давайте посмотрим, как мы можем преобразовать цикл for в понимание списка:
Метод, показанный выше, гораздо более чистый и легкий для чтения, чем цикл for. В следующем разделе мы рассмотрим, как эти различные методы сравниваются по скорости.
Какой метод быстрее всего получить индекс всех вхождений элемента в список Python
Таблица ниже демонстрирует, сколько времени потребовалось каждому методу, чтобы найти индексы всех вхождений в списке из ста миллионов элементов:
Для цикла и enumerate()
4.97 seconds
more_itertools locate()
7.08 seconds
numpy where()
6.05 seconds
Понимание списков и enumerate()
4.69 seconds
Мы можем видеть, что метод генератора списка был самым быстрым. Этот метод не только был самым быстрым, но и очень легко читался и не требовал дополнительных пакетов.
Заключение
В этом учебнике вы узнали, как найти индексные позиции всех вхождений элемента в список Python. Вы научились делать это с использованием функции enumerate()
Python как с помощью циклов for, так и с использованием списковых включений. Вы также узнали, как использовать функцию where()
numpy и функцию locate()
из библиотеки more_itertools.
Дополнительные ресурсы
Чтобы узнать больше о связанных темах, ознакомьтесь с нижеследующими учебными материалами:
Индекс списка Python: поиск первого, последнего или всех вхождений
Python IndexError: объяснение ошибки индекса списка вне диапазона
Python: получить индекс максимального элемента в списке
Last updated