Вступление
Python - это язык программирования очень высокого уровня, и он имеет тенденцию отклоняться от всего, отдаленно напоминающего внутреннюю структуру данных. Из-за этого нам обычно не нужны индексы списка для доступа к его элементам, однако иногда они нам очень нужны.
В этой статье мы рассмотрим различные подходы к тому, как получить доступ к индексу в цикле for Python .
Как индекс доступа в Python для Loop?
Самый простой и самый популярный метод доступа к индексу элементов в
цикле for - это просмотреть длину списка, увеличивая index
. При
каждом увеличении мы обращаемся к списку в этом index
:
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
. Затем мы используем эту index
переменную
для доступа к элементам списка в порядке от 0..n
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]
В этом примере мы перечислили каждое значение в списке с его
соответствующим индексом, создав объект перечисления. Затем мы
преобразовали этот объект перечисления в список с помощью конструктора
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]
Использование списков
Понимание списков - это способ определения и создания списков на
основе уже существующих списков. Обычно это более быстрый, элегантный и
компактный способ работы со списками по сравнению с функциями и циклами
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
представляет итерируемый объект ,
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()
. Этот конструктор
не принимает аргументов или имеет один аргумент - итерацию. Сюда входит
любой объект, который может быть последовательностью (строка, кортежи)
или коллекцией (набор, словарь).
Если параметры не переданы, он возвращает пустой список, а если итерируемый объект передается в качестве параметра, он создает список, состоящий из его элементов.
Мы создали список из двух списков элементов, которые имеют формат
[elementIndex, elementValue]
. Эти двухэлементные списки были созданы
путем передачи пар конструктору 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
до len(my_list)
в качестве первого параметра функции zip()
и
my_list
качестве второго параметра. Функция объединила каждый индекс с
его соответствующим значением, и мы распечатали их как кортежи,
используя цикл for
Если бы мы хотели преобразовать эти кортежи в список, мы бы использовали
конструктор list()
, и наша print
выглядела бы так:
print(list((index, value)))
Заключение
В этой статье мы рассмотрели четыре различных метода, которые помогают нам получить доступ к индексу и его соответствующему значению в списке Python.
Помимо самого основного метода, мы рассмотрели основы составления списков и то, как их можно использовать для решения этой задачи. Несмотря на то, что это более быстрый способ сделать это по сравнению с универсальным циклом for, обычно нам следует избегать его использования, если само понимание списка становится слишком сложным. Сложное понимание списков может привести к появлению большого количества беспорядочного кода.
Важно отметить, что даже несмотря на то, что каждое представление списка можно переписать в цикле for, не каждый цикл for можно переписать в понимание списка.
Еще два метода, которые мы использовали, полагались на встроенные
функции Python: enumerate()
и zip()
, которые объединяли индексы и
соответствующие им значения в кортежи. Затем мы преобразовали эти
кортежи в списки и распечатали их на стандартном выходе.