DevGang
Авторизоваться

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

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

В этой статье мы рассмотрим различные подходы к тому, как получить доступ к индексу в цикле for Python.

Как получить индекс?

Самый простой и самый популярный метод доступа к индексу элементов в цикле 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 - конец списка.

Этот код выдаст результат:

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]

Использование списков

Понимание списков - это способ определения и создания списков на основе уже существующих списков. Обычно это более быстрый, элегантный и компактный способ управления списками по сравнению с функциями и циклами for.

Каждое представление списка в Python содержит эти три элемента:

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

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

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

Использование 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
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Оплатив хостинг 25$ в подарок вы получите 100$ на счет

Получить