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

Введение Python - это язык программирования очень высокого уровня, и он имеет тенденцию отклоняться от всего, отдаленно напоминающего внутреннюю структуру данных. Из-за этого нам обычно не нужны индексы списка для доступа к его элементам, однако иногда они нам очень нужны. В этой статье мы рассмотрим различные подходы к тому, как получить доступ к индексу в цикле Python for. Как получить доступ к индексу в цикле Python? Самый простой и самый популярный метод доступа к индексу элементов в

Вступление

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 содержит эти три элемента:

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

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus