Параметры start и stop
index() Метод также может использоваться для получения индекса элемента в определенной подпоследовательности списка Python. Мы определяем подпоследовательность для поиска, используя параметры start и stop. Например, если мы хотим найти элемент в первых 5 элементах, мы устанавливаем значения параметров start и stop равными 0 и 5 соответственно.
Следующий блок кода ищет “Олег” в подпоследовательности, которая начинается с первого элемента (индекс 0) и заканчивается третьим элементом (индекс 2). Верхняя граница является исключительной, поэтому подпоследовательность, определяемая 0 и 3, включает только элементы “Джейн”, “Джеймс" и “Мэтт”.
>>> names = ["Юлия", "Дима", "Михаил", "Алиса", "Олег", "Дима"]
>>> names.index("Олег", 0, 3)
ValueError: 'Олег' is not in list
Давайте теперь поищем “Олег” во второй части списка.
>>> names = ["Юлия", "Дима", "Михаил", "Алиса", "Олег", "Дима"]
>>> names.index("Олег", 3, 6)
4
В приведенном выше блоке кода мы проверяем последовательность “Эшли”, “Оливер” и “Джеймс”. Хотя “Олег” является вторым элементом в этой последовательности, index() метод возвращает 4, индекс ”Олег" во всем списке. Даже когда мы ищем элемент в подпоследовательности, возвращаемый индекс вычисляется относительно начала полной последовательности (т. Е. всего списка), а не начального аргумента.
Недостатки метода index() в Python
Метод index() Возвращает первое вхождение элемента в списке
index()Метод возвращает только первое вхождение искомого элемента. Если существует несколько вхождений, и мы хотим знать, где находятся все из них, нам нужен другой подход.
Одним из вариантов является использование функции enumerate для понимания списка. Давайте посмотрим пример, чтобы продемонстрировать этот случай, используя пример, который мы уже видели.
>>> names = ["Юлия", "Дима", "Михаил", "Алиса", "Олег", "Дима"]
>>> [i for i, e in enumerate(names) if e == "Дима"]
[1, 5]
Встроенная в Python enumerate функция принимает итерируемый и необязательный начальный аргумент. Он выполняет итерацию по iterable, отслеживая количество. Значение count может использоваться в качестве индекса элемента. Значение по умолчанию необязательного аргумента start равно 0, что нам нужно при работе со списками, потому что индекс списка Python также начинается с 0.
Мы также можем использовать этот метод для поиска элемента в определенной подпоследовательности списка Python. В отличие от index() метода, у нас нет параметров start и stop для определения подпоследовательности. Однако мы всегда можем определить их, записав значения индекса рядом с названием списка в квадратных скобках. Например, функция enumerate в приведенном ниже блоке кода выполняет итерацию по подпоследовательности, начиная с четвертого элемента и заканчивая последним.
>>> names = ["Юлия", "Дима", "Михаил", "Алиса", "Олег", "Дима"]
>>> [i for i, e in enumerate(names[3:]) if e == "Дима"]
[2]
Важно отметить, что возвращаемое значение индекса выше относится к начальной точке подпоследовательности. Это потому, что enumerate функция начинает отсчет с 0. Мы можем настроить его так, чтобы находить значение индекса относительно первого элемента списка, используя параметр start enumerate функции.
>>> names = ["Юлия", "Дима", "Михаил", "Алиса", "Олег", "Дима"]
>>> [i for i, e in enumerate(names[3:], start=3) if e == "Дима"]
[5]
Поиск по списку с использованием цикла for
То, что делает понимание списка с помощью функции enumerate, также может быть выполнено путем написания for цикла следующим образом:
>>> names = ["Юлия", "Дима", "Михаил", "Алиса", "Олег", "Дима"]
>>> Дима_index = []
>>> count = [0]
>>>
>>> for item in names:
>>> if item == "Дима":
>>> Дима_index.append(count)
>>> count += 1
>>>
>>> Дима_index
[1, 5]
Этот вариант более подвержен ошибкам, чем понимание списка. Например, если приращение count переменной размещено неправильно, то результирующие значения индекса неверны. enumerate Функция автоматически увеличивает это значение для нас. С другой стороны, for цикл более универсален; мы можем делать то, что мы хотим в for цикле.
Линейная временная сложность метода index()
Другим недостатком index() метода является то, что он имеет линейную временную сложность по своей длине. Если у нас есть список из 1 миллиона элементов, и элемент, который мы ищем, является последним, то поиск может занять очень много времени. index()Метод является препятствием в этом случае, и мы должны рассмотреть другую структуру данных.
Более того, если мы поместим if инструкцию перед index() методом, чтобы убедиться, что элемент есть в списке, мы просматриваем весь список из 1 миллиона элементов перед каждым поиском. Это делает ситуацию еще более сложной и отнимающей много времени.
Использование списков Python
Список на Python - это фундаментальная структура данных. В этой статье мы узнали о index() методе списков.
Python - один из наиболее используемых языков программирования в широком диапазоне областей. Он прост в освоении, что делает его лучшим выбором для тех, кто хочет научиться программировать или не имеет технического образования. Когда вы изучаете Python, у вас появляется множество возможностей трудоустройства в сфере технологий, которые также приносят высокую прибыль.
Так зачем ждать? Начните изучать Python сегодня!