Używając pętli for, jak uzyskać dostęp do indeksu pętli, od 1 do 5 w tym przypadku?
Użyj, enumerate
aby uzyskać indeks z elementem podczas iteracji:
for index, item in enumerate(items):
print(index, item)
I zauważ, że indeksy Pythona zaczynają się od zera, więc otrzymałeś 0 do 4 z powyższym. Jeśli chcesz liczyć, od 1 do 5, zrób to:
for count, item in enumerate(items, start=1):
print(count, item)
Przepływ kontrolny Unidiomatic
To, o co prosisz, to Pythoniczny odpowiednik następującego, który jest algorytmem, którego większość programistów języków niższego poziomu użyłaby:
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
Lub w językach, w których nie ma pętli dla każdego:
index = 0
while index < len(items):
print(index, items[index])
index += 1
lub czasem częściej (ale jednoznacznie) w Pythonie:
for index in range(len(items)):
print(index, items[index])
Użyj funkcji wyliczenia
enumerate
Funkcja Pythona redukuje bałagan wizualny, ukrywając rozliczanie indeksów i zamykając iterowalny w innym iterowalnym ( enumerate
obiekcie), który daje krotkę indeksu z dwoma pozycjami i element, który zapewni pierwotna iterowalna. To wygląda tak:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Ten przykład kodu jest dość dobrym kanonicznym przykładem różnicy między kodem, który jest idiomatyczny dla Pythona, a kodem, który nie jest. Kod idiomatyczny jest wyrafinowanym (ale nie skomplikowanym) Pythonem, napisanym w sposób, w jaki był przeznaczony do użycia. Kod idiomatyczny oczekuje od projektantów języka, co oznacza, że zwykle ten kod jest nie tylko bardziej czytelny, ale także bardziej wydajny.
Uzyskiwanie rachunków
Nawet jeśli nie potrzebujesz indeksów na bieżąco, ale potrzebujesz liczby iteracji (czasem pożądanej), od której możesz zacząć, 1
a ostateczna liczba będzie twoją liczbą.
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
Liczba wydaje się być bardziej, o co chcesz zapytać (w przeciwieństwie do indeksu), gdy powiedziałeś, że chcesz od 1 do 5.
Podział - wyjaśnienie krok po kroku
Aby rozbić te przykłady, powiedzmy, że mamy listę elementów, które chcemy iterować za pomocą indeksu:
items = ['a', 'b', 'c', 'd', 'e']
Teraz przekazujemy iterowalną wartość do wyliczenia, tworząc obiekt wyliczeniowy:
enumerate_object = enumerate(items) # the enumerate object
Możemy wyciągnąć pierwszy element z iteracji, który dostalibyśmy w pętli z next
funkcją:
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
Widzimy, że otrzymujemy krotkę 0
pierwszego indeksu i 'a'
pierwszego elementu:
(0, 'a')
możemy użyć tak zwanego „ rozpakowywania sekwencji ”, aby wyodrębnić elementy z tej dwu-krotki:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
a kiedy sprawdzać index
, uważamy, że odnosi się do pierwszego indeksu, 0, i item
odnosi się do pierwszego elementu, 'a'
.
>>> print(index)
0
>>> print(item)
a
Wniosek
- Indeksy języka Python zaczynają się od zera
- Aby uzyskać te indeksy z iterowalnego podczas iteracji, użyj funkcji wyliczania
- Użycie wyliczenia w sposób idiomatyczny (wraz z rozpakowaniem krotki) tworzy kod, który jest bardziej czytelny i łatwy do utrzymania:
Więc zrób to:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)