Как получить доступ к индексу в цикле for Python
Вступление
Python-это очень высокоуровневый язык программирования, и он имеет тенденцию отклоняться от всего, что отдаленно напоминает внутреннюю структуру данных. Из-за этого нам обычно не нужны индексы списка для доступа к его элементам, однако иногда они нам отчаянно нужны.
В этой статье мы рассмотрим различные подходы к тому, как получить доступ к индексу в цикле for Python .
Как получить доступ к индексу в цикле for Python?
Самый простой и популярный способ доступа к индексу элементов в цикле for – это пройти по длине списка, увеличивая индекс . При каждом увеличении мы получаем доступ к списку этого
индекса :
my_list = [3, 5, 4, 2, 2, 5, 5] print("Indices and values in my_list:") for index in range(len(my_list)): print(index, my_list[index], end = "\n")
Здесь мы не повторяем список, как обычно. Мы выполняем итерацию из 0..len(my_list)
с индексом . Затем мы используем эту переменную
index для доступа к элементам списка в порядке
0..n , где
n - конец списка.
Этот код будет производить вывод:
Indices and values in my_list: 0 3 1 5 2 4 3 2 4 2 5 5 6 5
Использование enumerate()
enumerate ()
-это встроенная функция Python, которая очень полезна, когда мы хотим получить доступ как к значениям, так и к индексам списка. Стоит отметить, что это самый быстрый и эффективный метод получения индекса в цикле for .
Этот метод добавляет счетчик к итерируемому объекту и возвращает их вместе в виде перечисляемого объекта. Этот перечисляемый объект можно легко преобразовать в список с помощью конструктора list ()
. Это наиболее распространенный способ доступа к обоим элементам и их индексам одновременно.
Теперь давайте взглянем на код, который иллюстрирует, как используется этот метод:
my_list = [3, 5, 4, 2, 2, 5, 5] print("Indices and values in my_list:") for index, value in enumerate(my_list): print(list((index, value)))
Этот код будет производить вывод:
Indices and values in my_list: [0, 3] [1, 5] [2, 4] [3, 2] [4, 2] [5, 5] [6, 5]
В этом примере мы перечислили каждое значение в списке с соответствующим индексом, создав объект enumerate. Затем мы преобразовали этот объект перечисления в список с помощью конструктора list()
и напечатали каждый список в стандартном выводе.
Кроме того, вы можете установить аргумент start
для изменения индексации. В настоящее время он основан на 0. Давайте изменим его, чтобы начать с 1
вместо этого:
my_list = [3, 5, 4, 2, 2, 5, 5] print("Indices and values in my_list:") for index, value in enumerate(my_list, start=1): print(list((index, value)))
Так вот, это производит:
Indices and values in my_list: [1, 3] [2, 5] [3, 4] [4, 2] [5, 2] [6, 5] [7, 5]
Использование Понимания Списка
A понимание списка – это способ определения и создания списков на основе уже существующих списков. Обычно это более быстрый, элегантный и компактный способ манипулирования списками по сравнению с функциями и циклами for
.
Каждое понимание списка в Python содержит эти три элемента:
- iterable – Коллекция элементов, которые мы можем проверять по одному
- member – Значение или объект в списке (который является итеративным)
- выражение – Может быть любым допустимым выражением, возвращающим значение(член, итерация, вызов функции…)
Давайте рассмотрим следующий пример:
my_list = [1, 2, 3, 4, 5] my_list_squared = [m*m for m in my_list] print(my_list_squared)
Этот код будет производить вывод:
[1, 4, 9, 16, 25]
В этом понимании списка my_list
представляет iterable , m
представляет член и m*m
представляет выражение .
Теперь, когда мы рассмотрели, что такое понимание списка, мы можем использовать его для итерации по списку и доступа к его индексам и соответствующим значениям. Давайте рассмотрим этот пример:
my_list = [3, 5, 4, 2, 2, 5, 5] print("Indices and values in my_list:") print([list((i, my_list[i])) for i in range(len(my_list))])
Этот код будет производить вывод:
Indices and values in my_list: [[0, 3], [1, 5], [2, 4], [3, 2], [4, 2], [5, 5], [6, 5]]
В этом примере мы использовали конструктор list ()
. Этот конструктор не принимает ни аргументов, ни одного аргумента – итерируемого. Это включает в себя любой объект, который может быть последовательностью (строка, кортеж) или коллекцией (набор, словарь).
Если параметры не передаются, он возвращает пустой список, а если в качестве параметра передается итерабель, он создает список, состоящий из его элементов.
Мы построили список из двух списков элементов, которые находятся в формате [индекс элемента, значение элемента]
. Эти двухэлементные списки были построены путем передачи пар в конструктор list ()
, который затем выплюнул эквивалентный список.
Это создаст 7 отдельных списков, содержащих индекс и соответствующее ему значение в my_list
, которые будут напечатаны.
Использование zip()
Функция zip()
принимает два или более параметров, которые все должны быть итеративными.
Он возвращает объект zip – итератор кортежей, в котором первый элемент в каждом переданном итераторе спарен вместе, второй элемент в каждом переданном итераторе спарен вместе и аналогично для остальных:
list_a = [1, 2, 3] list_b = ['A', 'B', 'C'] # Zip will make touples from elements with the same # index (position in the list). Meaning that 1 from the # first list will be paired with 'A', 2 will be paired # with 'B' and so on... for elem1,elem2 in zip(list_a,list_b): print((elem1,elem2))
Запустив приведенный выше фрагмент кода, мы получим:
(1, 'A') (2, 'B') (3, 'C')
Длина итератора, возвращаемого этой функцией, равна длине наименьшего из ее параметров.
Теперь, когда мы объяснили, как работает эта функция, давайте использовать ее для решения нашей задачи:
my_list = [3, 5, 4, 2, 2, 5, 5] print ("Indices and values in my_list:") for index, value in zip(range(len(my_list)), my_list): print((index, value))
Этот код будет производить вывод:
Indices and values in my_list: (0, 3) (1, 5) (2, 4) (3, 2) (4, 2) (5, 5) (6, 5)
В этом примере мы передали последовательность чисел в диапазоне от 0
to len(my_list)
в качестве первого параметра функции zip()
и my_list
в качестве ее второго параметра. Функция связала каждый индекс с соответствующим ему значением, и мы напечатали их как кортежи, используя цикл for
.
Если бы мы хотели преобразовать эти кортежи в список, мы бы использовали конструктор list ()
, и наша функция print
выглядела бы так:
print(list((index, value)))
Вывод
В этой статье мы рассмотрели четыре различных метода, которые помогают нам получить доступ к индексу и его соответствующему значению в списке Python.
Помимо самого основного метода, мы рассмотрели основы понимания списков и то, как их можно использовать для решения этой задачи. Несмотря на то, что это более быстрый способ сделать это по сравнению с общим циклом for, мы обычно должны избегать его использования, если само понимание списка становится слишком сложным. Сложное понимание списка может привести к большому количеству беспорядочного кода.
Важно отметить, что хотя каждое понимание списка может быть переписано в цикле for, не каждый цикл for может быть переписан в понимание списка.
Еще два метода , которые мы использовали, опирались на встроенные функции Python: enumerate()
и zip ()
, которые объединяли индексы и соответствующие им значения в кортежи. Затем мы преобразовали эти кортежи в списки и напечатали их на стандартном выходе.