Рубрики
Без рубрики

Как получить доступ к индексу в цикле for Python

В этом уроке мы рассмотрим, как получить доступ к индексу в цикле for Python. Мы будем использовать общий ручной подход, а также использовать перечисления, функцию zip() и понимание списков.

Автор оригинала: Mila Lukic.

Как получить доступ к индексу в цикле 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 содержит эти три элемента:

  1. iterable – Коллекция элементов, которые мы можем проверять по одному
  2. member – Значение или объект в списке (который является итеративным)
  3. выражение – Может быть любым допустимым выражением, возвращающим значение(член, итерация, вызов функции…)

Давайте рассмотрим следующий пример:

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 () , которые объединяли индексы и соответствующие им значения в кортежи. Затем мы преобразовали эти кортежи в списки и напечатали их на стандартном выходе.