Доступ к индексу в циклах for?

Используя цикл for, как мне получить доступ к индексу цикла, в данном случае от 1 до 5?

Используйте enumerate, чтобы получить python-interpreter индекс с элементом при итерации:

for index, item in enumerate(items):
    print(index, item)

Обратите list-comparison внимание, что индексы Python pythonic начинаются с нуля, поэтому lists вы получите от 0 до 4 с указанным looping выше. Если вам нужен счет python-interpreter от 1 до 5, сделайте следующее:

count = 0 # in case items is empty and you need it after the loop
for count, item in enumerate(items, start=1):
    print(count, item)

Унидиоматический поток управления

То, что lists вы просите, - это Pythonic-эквивалент python-list следующего алгоритма, который loop будет использовать большинство python программистов языков нижнего lists уровня:

index = 0            # Python's indexing starts at zero
for item in items:   # Python's for loops are a "for each" loop 
    print(index, item)
    index += 1

Или на языках, в которых python-interpreter нет цикла для каждого:

index = 0
while index < len(items):
    print(index, items[index])
    index += 1

или lists иногда чаще (но неидиоматически) встречается loop в Python:

for index in range(len(items)):
    print(index, items[index])

Используйте функцию перечисления

Python enumerate function уменьшает python-list визуальный беспорядок, скрывая pythonic учет индексов и инкапсулируя list итерируемый объект в другой looping итерируемый объект (объект loop enumerate), который дает двухэлементный py кортеж индекса и элемент, который python-interpreter исходный итерируемый предоставит. Это lists выглядит так:

for index, item in enumerate(items, start=0):   # default is zero
    print(index, item)

Этот образец lists кода довольно хорошо является python примером canonical различия между list-comparison идиоматическим кодом Python ilist и другим кодом. Идиоматический python-list код - это сложный (но не python-list сложный) Python, написанный list-comparison так, как он был предназначен looping для использования. Разработчики looping языка ожидают идиоматического python-interpreter кода, а это означает, что loops обычно этот код не только pythonic более читабелен, но и более loop эффективен.

Подсчет

Даже если вам ilist не нужны индексы на ходу, но ilist вам нужен подсчет итераций python-shell (иногда желательно), вы можете python-interpreter начать с 1, и последнее число looping будет вашим счетчиком.

count = 0 # in case items is empty
for count, item in enumerate(items, start=1):   # default is zero
    print(item)

print('there were {0} items printed'.format(count))

Счетчик, кажется, больше list того, о чем вы собираетесь python-shell просить (а не индексировать), когда python-list вы сказали, что хотите от pythonista 1 до 5.


Разборка - пошаговое объяснение

Чтобы разбить эти list-comparison примеры, скажем, у нас есть py список элементов, которые python-shell мы хотим перебрать с помощью python индекса:

items = ['a', 'b', 'c', 'd', 'e']

Теперь мы передаем looping эту итерацию в enumerate, создавая pythonista объект enumerate:

enumerate_object = enumerate(items) # the enumerate object

С помощью python функции next мы можем извлечь pythonic первый элемент из этой итерации, который lists мы получили бы в цикле:

iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)

И ilist мы видим, что получаем кортеж loop из 0, первого индекса, и 'a', первого loops элемента:

(0, 'a')

мы можем использовать python-shell так называемый "sequence unpacking" для ilist извлечения элементов из этого loops кортежа из двух элементов:

index, item = iteration
#   0,  'a' = (0, 'a') # essentially this.

и python-shell когда мы проверяем index, мы обнаруживаем, что list-comparison он относится к первому индексу, 0, а looping item относится к первому элементу, 'a'.

>>> print(index)
0
>>> print(item)
a

Заключение

  • Индексы Python начинаются с нуля
  • Чтобы получить эти индексы из итерируемого объекта при итерации по нему, используйте функцию перечисления
  • Использование enumerate идиоматическим способом (наряду с распаковкой кортежей) создает код, который становится более читабельным и удобным в обслуживании:

Итак, сделайте py это:

for index, item in enumerate(items, start=0):   # Python indexes start at zero
    print(index, item)

python

loops

list

2022-11-19T05:32:40+00:00
Вопросы с похожей тематикой, как у вопроса:

Доступ к индексу в циклах for?