Podczas pracy z iteracjami w języku Python znalezienie liczby elementów zawartych w iteracjach jest powszechną operacją. Dowiedz się, jak korzystać z wbudowanego w Pythona len, aby znaleźć długość iteracji i wiele więcej.
Python oferuje zestaw wbudowanych struktur danych i zestaw metod do pracy z nimi. Ponadto istnieją wbudowane funkcje przydatne podczas pracy z tymi strukturami danych. Jedną z takich funkcji jest len(), która podaje liczbę elementów obecnych w iterowalnym.
W tym samouczku nauczymy się, jak używać funkcji len() z listami, krotkami, ciągami znaków i nie tylko. Zobaczymy również kilka typowych przypadków użycia.
Zaczynamy!👩🏫
Spis treści:
Składnia funkcji len() w języku Python
Oto składnia użycia funkcji len Pythona:
len(iterable)
Jak widać, funkcja len() wymaga jednego parametru, którym jest dowolny poprawny iterowalny parametr. Iterable jest często jedną z list, krotek lub łańcuchów. Ale może to być również dowolny inny prawidłowy typ.
Widzimy, że składnia funkcji len() jest bardzo prosta. Następnie przejdźmy do kodowania kilku przykładów.
📑 Aby zapoznać się z przykładami kodu w tym samouczku, możesz kodować razem w Pythonie REPL.
Używanie funkcji len() z Iterables
Z Sekwencjami
Możesz użyć funkcji len(), aby znaleźć długość elementów iterowalnych, takich jak listy, krotki i łańcuchy.
Oto przykład:
>>> nums = [9,3,6,1,2] >>> len(nums) 5 >>> nums_tup = (9,3,6,1,2) >>> len(nums_tup) 5
W przypadku tych struktur danych, które przechowują sekwencję, zwykle uzyskuje się dostęp do elementów za pomocą ich indeksu lub uzyskuje się wycinek (podsekwencję) w razie potrzeby.
Z innymi kolekcjami
Możesz także użyć funkcji len() z innymi kolekcjami Pythona, takimi jak zestawy i słowniki.
Te struktury danych to nieuporządkowane kolekcje. Chociaż możesz nie być zainteresowany zamawianiem elementów, nadal warto uzyskać łączną liczbę elementów w kolekcji.
>>> nums_set = set(nums) >>> len(nums_set) 5 >>> prices = {'Notebook':5,'Pencil case':7,'Bookmarks':3,'Pens':1,'Markers':8} >>> len(prices) 5
Typowe przypadki użycia funkcji len() w języku Python
Do tej pory widzieliśmy proste przykłady użycia funkcji len() w celu uzyskania liczby elementów w iterowalnym. Zobaczmy teraz, gdzie możemy to wykorzystać w praktyce.
# 1. Iteracja przy użyciu pętli for
Pętla for w języku Python zapewnia konstrukcję umożliwiającą przechodzenie przez iterowalne elementy w elemencie for w iterowalnej składni. Ale jeśli chcesz uzyskać dostęp do indeksu każdego elementu zamiast samego elementu lub zarówno indeksu, jak i elementów razem, możesz użyć funkcji range(), jak pokazano:
>>> nums = [9,2,4,7,8] >>> for i in range(len(nums)): ... print(f"Index {i}: {nums[i]}")
Ponieważ range(N) daje sekwencję liczb całkowitych 0,1,2,…,N – 1, użycie range(len(nums)) daje nam zestaw prawidłowych indeksów do przejścia.
# Output Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
Jednak zalecanym sposobem dostępu do indeksu i elementu w Pythonie jest użycie funkcji enumerate:
>>> nums = [9,2,4,7,8] >>> for idx,num in enumerate(nums): ... print(f"Index {idx}: {num}")
# Output Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
#2. Pętle warunkowe przy użyciu pętli while
Powiedzmy, że masz listę liczb nums. Metoda listy pop() usuwa ostatni element z listy i zwraca go.
Dopóki długość listy nums len(nums) jest większa od zera — istnieje co najmniej jeden element, który można usunąć.
>>> nums = [9,2,4,7,8] >>> while len(nums) > 0: ... nums.pop()
# Output 8 7 4 2 9
Powyższy przykład jest bardziej wyraźnym sposobem zapisania następującej treści:
>>> nums = [9,2,4,7,8] >>> while nums: ... nums.pop()
while nums: odpowiada warunkowi „podczas gdy lista nums nie jest pusta”.
#3. Sprawdzanie i walidacja długości elementów iteracyjnych
Innym powszechnym zastosowaniem funkcji len jest sprawdzanie i weryfikowanie długości pewnych elementów iterowalnych.
Tutaj sprawdzamy, czy nazwa użytkownika jest poprawnym ciągiem na podstawie długości (obliczonej za pomocą funkcji len()):
>>> username = "another-random-user" >>> if len(username) > 10: ... print("Username too long; should be 10 characters long at max.") ... elif len(username) < 5: ... print("Username too short; should be at least 5 characters long.") ... else: ... print("Valid username!")
Username too long; should be 10 characters long at max.
#4. Zrozumienia list i słowników
Zrozumienia w Pythonie zapewniają zwięzłą składnię do konstruowania nowych iteracji z istniejących. Możemy użyć wbudowanych funkcji w wyrażeniu ze zrozumieniem.
Rozumienie listy
W tym zrozumieniu listy używamy funkcji len(), aby uzyskać długość każdego łańcucha na liście języków.
>>> languages = ['Python','C','Rust','JavaScript'] >>> len_langs = [len(lang) for lang in languages] >>> len_langs [6, 1, 4, 10]
Rozumienie słownika
W tym rozumieniu słownika używamy listy języków i funkcji len() do skonstruowania słownika:
>>> languages = ['Python','C','Rust','JavaScript'] >>> lang_len = {lang:len(lang) for lang in languages} >>> lang_len {'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}
Tutaj klucze i wartości to odpowiednio ciągi językowe i długość ciągów językowych.
#5. Kluczowy parametr w sortowaniu niestandardowym
Python ma wbudowaną metodę sort() do sortowania list Pythona w miejscu oraz funkcję sorted() do sortowania list i innych elementów iterowalnych.
W obu przypadkach możesz użyć parametru klucza, aby dostosować sortowanie.
Tutaj sortujemy listę języków na podstawie długości łańcucha.
>>> languages = ['Python','C','Rust','JavaScript'] >>> languages.sort(key=len) >>> languages ['C', 'Rust', 'Python', 'JavaScript']
W poniższym fragmencie używamy funkcji sorted() w celu uzyskania posortowanej listy.
>>> languages = ['Hindi','English','German','French'] >>> sorted(languages,key=len) ['Hindi', 'German', 'French', 'English']
W tym przykładzie zarówno „niemiecki”, jak i „francuski” mają po 6 znaków. Ponieważ funkcja sorted() wykonuje stabilne sortowanie, kolejność na oryginalnej liście jest zachowana.
#6. Długość tablic NumPy
Możesz także użyć funkcji len() z innymi strukturami danych, takimi jak Tablice NumPy.
>>> import numpy as np >>> np_array = np.array([3,4,6,9]) >>> type(np_array) <class 'numpy.ndarray'> >>> len(np_array) 4
W tym przypadku np_array jest wektorem z 4 elementami. Zatem len(np_array) zwraca 4, czyli liczbę elementów obecnych w tablicy.
Macierz to tablica dwuwymiarowa.
Rozważ następujący przykład. len(np_array) to 2, czyli liczba wierszy.
>>> matrix = [[1,2,3],[4,5,6]] >>> np_array = np.array(matrix) >>> np_array array([[1, 2, 3], [4, 5, 6]]) >>> len(np_array) 2
Aby to zrozumieć, wróćmy do matrixa. Mamy zagnieżdżoną strukturę list, w której zewnętrzna lista zawiera dwie zagnieżdżone listy. A funkcja len() zwraca liczbę elementów w kontenerze (tutaj są to dwie listy):
>>> help(len) Help on built-in function len in module builtins: len(obj, /) Return the number of items in a container.
Jednak gdy zaczniesz pracować z tablicami wielowymiarowymi, zaleca się zamiast tego użycie atrybutu kształtu.
>>> np_array.shape (2, 3)
Typowe pułapki, których należy unikać podczas korzystania z funkcji len() Pythona
Aby zakończyć naszą dyskusję, omówmy niektóre typowe pułapki, których należy unikać podczas korzystania z funkcji len w Pythonie.
Używanie len() z typami danych, które nie są iterowalne
Wiemy, że funkcja len przyjmuje jako argument tylko poprawne iterowalne elementy. Oznacza to, że jeśli wywołasz funkcję len z — nieprawidłowym typem danych — który nie jest iterowalny, napotkasz błędy.
Takie nieprawidłowe typy obejmują podstawowe typy danych, takie jak liczby całkowite, liczby zmiennoprzecinkowe i wartości logiczne:
>>> len(2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len() >>> len(True) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'bool' has no len() >>> len(3.14) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'float' has no len()
W Pythonie generatory są wydajnymi pod względem pamięci opcjami dla przypadków użycia, które wymagają generowania sekwencji. Obiekt generatora zwraca elementy sekwencji — na żądanie — po jednym elemencie na raz. Ale obiekty generatora nie mają długości.
Więc napotkasz błędy, jeśli spróbujesz obliczyć długość obiektu generatora:
>>> nums_sq = (i*i for i in range(10)) >>> nums_sq <generator object <genexpr> at 0x0157DBC0> >>> len(nums_sq) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'generator' has no len()
Używanie len() z krotkami o długości jeden
Jeśli wstawisz element tylko do krotki, Python zinterpretuje go jako pojedynczy element, a nie jako krotkę.
Oto przykład:
>>> nums = (1) >>> len(nums) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len()
Jeśli więc masz krotkę zawierającą tylko jeden element, zainicjuj ją w następującej postaci: nazwa_krotki = (elt, ) tak, aby była interpretowana jako krotka:
>>> nums = (1,) >>> len(nums) 1
Podsumowując
Oto podsumowanie tego, co omówiliśmy w tym samouczku:
- Liczbę elementów w dowolnej iterowalności można znaleźć za pomocą funkcji len() w Pythonie. Składnia funkcji długości jest następująca: len(any-valid-iterable).
- Obejmuje to sekwencje, takie jak listy, krotki i łańcuchy. Oraz inne kolekcje, takie jak słowniki i zestawy.
- Funkcja len() jest często używana w pętlach i wyrażeniach złożonych.
- Możesz także użyć funkcji len() jako kluczowego parametru, gdy chcesz dostosować sortowanie według długości. Na przykład: sortowanie listy ciągów na podstawie ich długości.
Następnie naucz się korzystać z funkcji sum() języka Python.