Як за допомогою циклу 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)
Унідіоматичне управління потоком
Що ви просите, це пітонічний еквівалент наступного, що є алгоритмом, який використовує більшість програмістів мов нижчого рівня:
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
Або мовами, які не мають циклу для кожного:
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)