Składnia, przykłady i przypadki użycia

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!👩‍🏫

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.