Используя цикл for, как мне получить доступ к индексу цикла, от 1 до 5 в этом случае?
Используйте enumerate
для получения индекса с элементом во время итерации:
for index, item in enumerate(items):
print(index, item)
И обратите внимание, что индексы Python начинаются с нуля, так что вы получите от 0 до 4 с выше. Если вы хотите считать от 1 до 5, сделайте это:
for count, item in enumerate(items, start=1):
print(count, item)
Unidiomatic контроль потока
То, что вы просите, - это Pythonic-эквивалент следующего: алгоритм, который будет использовать большинство программистов на языках нижнего уровня:
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
Или в языках, где нет цикла for-each:
index = 0
while index < len(items):
print(index, items[index])
index += 1
или иногда чаще (но неидиоматически) встречается в Python:
for index in range(len(items)):
print(index, items[index])
Используйте функцию перечисления
enumerate
Функция Python уменьшает визуальный беспорядок, скрывая учет индексов и инкапсулируя итерируемое в другой итерируемый enumerate
объект ( объект), который дает кортеж из двух элементов индекса и элемент, который будет обеспечивать исходная итерация. Это выглядит так:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Этот пример кода довольно хорошо является каноническим примером различия между кодом, который является идиоматическим для Python, и кодом, который не является таковым. Идиоматический код является сложным (но не сложным) Python, написанным так, как он был предназначен для использования. Разработчики языка ожидают идиоматического кода, что означает, что обычно этот код не только более читабелен, но и более эффективен.
Получение подсчета
Даже если вам не нужны индексы по ходу дела, но вам нужно количество итераций (иногда желательных), с которых вы можете начать, 1
и окончательным числом будет ваш счет.
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
Счет, кажется, больше того, что вы намереваетесь просить (в отличие от индекса), когда вы сказали, что хотите от 1 до 5.
Разбивка - пошаговое объяснение
Чтобы разбить эти примеры, скажем, у нас есть список элементов, которые мы хотим перебрать с индексом:
items = ['a', 'b', 'c', 'd', 'e']
Теперь мы передаем эту итерацию для перечисления, создавая объект перечисления:
enumerate_object = enumerate(items) # the enumerate object
Мы можем извлечь первый элемент из этой итерации, который мы бы запустили в цикл с помощью next
функции:
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
И мы видим, что мы получаем кортеж 0
, первый индекс и 'a'
первый элемент:
(0, 'a')
мы можем использовать то, что называется « распаковка последовательности », чтобы извлечь элементы из этого двухкорпусного:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
и когда мы исследуем index
, мы находим , что относится к первому индексу, 0, и item
относится к первому пункту 'a'
.
>>> print(index)
0
>>> print(item)
a
Вывод
- Индексы Python начинаются с нуля
- Чтобы получить эти индексы из итерируемого при его итерации по нему, используйте функцию перечисления
- Использование перечисления идиоматическим способом (вместе с распаковкой кортежей) создает код, который будет более читабельным и обслуживаемым:
Так что сделайте это:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)