Доступ к индексу в циклах 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 итерируемый объект (объект loopenumerate
), который дает двухэлементный 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, а loopingitem
относится к первому элементу,'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
Доступ к индексу в циклах for?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.