Wbudowane funkcje w praktyce: enumerate()
W tym ćwiczeniu przećwiczysz użycie wbudowanej funkcji Pythona enumerate(). Przydaje się ona do tworzenia list z indeksami. Wyobraź sobie, że masz listę gości przybyłych na przyjęcie – posortowaną według kolejności przybycia (Jerry przyszedł pierwszy, potem Kramer itd.):
names = ['Jerry', 'Kramer', 'Elaine', 'George', 'Newman']
Aby przypisać każdej osobie indeks odpowiadający kolejności przybycia, można użyć następującej pętli for:
indexed_names = []
for i in range(len(names)):
index_name = (i, names[i])
indexed_names.append(index_name)
[(0,'Jerry'),(1,'Kramer'),(2,'Elaine'),(3,'George'),(4,'Newman')]
To jednak niezbyt wydajne rozwiązanie. Sprawdźmy, jak użyć enumerate(), żeby zrobić to efektywniej.
To ćwiczenie jest częścią kursu
Wydajny kod w Pythonie
Instrukcje do ćwiczenia
- Zamiast
for i in range(len(names)), zaktualizuj pętlę for tak, aby używałaijako zmiennej indeksowej inamejako zmiennej iteratora – skorzystaj przy tym zenumerate(). - Przepisz poprzednią pętlę for, używając
enumerate()i wyrażenia listowego, aby utworzyć nową listęindexed_names_comp. - Utwórz kolejną listę (
indexed_names_unpack), używając gwiazdki (*) do rozpakowania obiektu enumerate powstałego z wywołaniaenumerate()nanames. Tym razem ustaw indeks początkowyenumerate()na jeden zamiast zero.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# Rewrite the for loop to use enumerate
indexed_names = []
for ____,_____ in ____(names):
index_name = (i,name)
indexed_names.append(index_name)
print(indexed_names)
# Rewrite the above for loop using list comprehension
indexed_names_comp = [(____,____) for i,name in ____(names)]
print(indexed_names_comp)
# Unpack an enumerate object with a starting index of one
indexed_names_unpack = [____(names, ____)]
print(indexed_names_unpack)