Как использовать цикл 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])
Использование функции перечисления
Функция Python enumerate
уменьшает визуальный беспорядок, скрывая учет для индексов и инкапсулируя итерируемое в другой итерируемый (объект 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)