Podczas pracy z iteracjami w języku Python, częstym zadaniem jest ustalenie liczby elementów, które zawiera dana iteracja. Ten artykuł wyjaśni, jak wykorzystać wbudowaną funkcję `len` w Pythonie, aby określić rozmiar iteracji i poznać jej inne zastosowania.
Python oferuje szeroki wachlarz wbudowanych struktur danych i metod do manipulowania nimi. Ponadto, udostępnia on funkcje, które okazują się bardzo przydatne w pracy z tymi strukturami. Jedną z nich jest właśnie funkcja `len()`, która umożliwia uzyskanie liczby elementów w danym obiekcie iterowalnym.
W tym poradniku nauczymy się, jak efektywnie korzystać z funkcji `len()` w połączeniu z listami, krotkami, ciągami znaków i innymi strukturami. Omówimy również kilka typowych scenariuszy jej użycia.
Zacznijmy! 👩🏫
Zasady składni funkcji `len()` w Pythonie
Oto schemat składni, według którego używa się funkcji `len` w Pythonie:
len(obiekt_iterowalny)
Jak można zauważyć, funkcja `len()` przyjmuje jeden parametr, który jest dowolnym poprawnym obiektem iterowalnym. Najczęściej są to listy, krotki lub ciągi znaków, jednak może to być również inny, odpowiedni typ danych.
Składnia funkcji `len()` jest niezwykle prosta. Przejdźmy teraz do praktycznych przykładów.
📑 Aby lepiej zrozumieć przedstawione przykłady, zachęcamy do testowania kodu w interaktywnym środowisku Python REPL.
Wykorzystanie funkcji `len()` z obiektami iterowalnymi
Z sekwencjami
Funkcja `len()` umożliwia uzyskanie liczby elementów w sekwencyjnych typach danych, takich jak listy, krotki i łańcuchy znaków.
Spójrz na ten przykład:
>>> numery = [9,3,6,1,2] >>> len(numery) 5 >>> numery_krotka = (9,3,6,1,2) >>> len(numery_krotka) 5
W przypadku struktur, które przechowują sekwencje, elementy są zwykle dostępne za pomocą ich indeksów lub poprzez wycinanie podsekwencji.
Z innymi zbiorami
Możesz również użyć funkcji `len()` z innymi typami zbiorów, jakimi są zbiory i słowniki.
Te struktury danych reprezentują nieuporządkowane kolekcje. Mimo że kolejność elementów nie jest istotna, nadal może być przydatne określenie ich całkowitej liczby.
>>> numery_zbior = set(numery) >>> len(numery_zbior) 5 >>> ceny = {'Notebook':5,'Piórnik':7,'Zakładki':3,'Długopisy':1,'Markery':8} >>> len(ceny) 5
Typowe przypadki użycia funkcji `len()` w Pythonie
Dotychczas widzieliśmy proste przykłady użycia funkcji `len()` do ustalania liczby elementów w obiektach iterowalnych. Teraz zobaczmy, gdzie możemy ją wykorzystać w praktycznych sytuacjach.
# 1. Iteracja z użyciem pętli `for`
Pętla `for` w Pythonie umożliwia iterację po elementach obiektu iterowalnego w składni `for element in iterowalny`. Jednakże, jeśli chcesz uzyskać dostęp do indeksu każdego elementu zamiast samego elementu (lub jednocześnie do indeksu i elementu), można użyć funkcji `range()`, w następujący sposób:
>>> numery = [9,2,4,7,8] >>> for i in range(len(numery)): ... print(f"Indeks {i}: {numery[i]}")
Ponieważ `range(N)` zwraca sekwencję liczb całkowitych 0, 1, 2, …, N – 1, użycie `range(len(numery))` daje nam zestaw poprawnych indeksów do iteracji.
# Wynik Indeks 0: 9 Indeks 1: 2 Indeks 2: 4 Indeks 3: 7 Indeks 4: 8
Jednakże, bardziej zalecanym sposobem dostępu do indeksu i elementu w Pythonie jest użycie funkcji `enumerate`:
>>> numery = [9,2,4,7,8] >>> for idx, num in enumerate(numery): ... print(f"Indeks {idx}: {num}")
# Wynik Indeks 0: 9 Indeks 1: 2 Indeks 2: 4 Indeks 3: 7 Indeks 4: 8
#2. Pętle warunkowe z użyciem pętli `while`
Załóżmy, że masz listę liczb o nazwie `numery`. Metoda `pop()` listy usuwa ostatni element z listy i go zwraca.
Dopóki długość listy `numery` (określona przez `len(numery)`) jest większa od zera – czyli dopóki lista ma elementy do usunięcia.
>>> numery = [9,2,4,7,8] >>> while len(numery) > 0: ... numery.pop()
# Wynik 8 7 4 2 9
Powyższy przykład to bardziej jawny sposób zapisu następującej treści:
>>> numery = [9,2,4,7,8] >>> while numery: ... numery.pop()
`while numery:` jest odpowiednikiem warunku „dopóki lista `numery` nie jest pusta”.
#3. Sprawdzanie i walidacja długości obiektów iterowalnych
Kolejnym typowym zastosowaniem funkcji `len` jest sprawdzanie i weryfikowanie długości pewnych obiektów iterowalnych.
W poniższym przykładzie sprawdzamy, czy nazwa użytkownika jest poprawna na podstawie jej długości (obliczonej za pomocą funkcji `len()`):
>>> nazwa_uzytkownika = "kolejny-losowy-uzytkownik" >>> if len(nazwa_uzytkownika) > 10: ... print("Nazwa użytkownika jest za długa, powinna mieć maksymalnie 10 znaków.") ... elif len(nazwa_uzytkownika) < 5: ... print("Nazwa użytkownika jest za krótka, powinna mieć przynajmniej 5 znaków.") ... else: ... print("Prawidłowa nazwa użytkownika!")
Nazwa użytkownika jest za długa, powinna mieć maksymalnie 10 znaków.
#4. Listy i słowniki składane
Listy i słowniki składane w Pythonie umożliwiają zwięzłe tworzenie nowych obiektów iterowalnych z istniejących. Możemy użyć wbudowanych funkcji w wyrażeniach list składanych.
Listy składane
W tym przykładzie listy składanej wykorzystujemy funkcję `len()` do uzyskania długości każdego napisu na liście języków.
>>> jezyki = ['Python','C','Rust','JavaScript'] >>> dlugosci_jezykow = [len(jezyk) for jezyk in jezyki] >>> dlugosci_jezykow [6, 1, 4, 10]
Słowniki składane
W tym przykładzie słownika składanego wykorzystujemy listę języków i funkcję `len()` do utworzenia słownika:
>>> jezyki = ['Python','C','Rust','JavaScript'] >>> jezyk_dlugosc = {jezyk:len(jezyk) for jezyk in jezyki} >>> jezyk_dlugosc {'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}
Tutaj, kluczami są ciągi znaków z nazwami języków, a wartościami ich długości.
#5. Parametr `key` w sortowaniu niestandardowym
Python udostępnia wbudowaną metodę `sort()` do sortowania list w miejscu oraz funkcję `sorted()` do sortowania list i innych obiektów iterowalnych.
W obu przypadkach możesz użyć parametru `key`, aby dostosować proces sortowania.
W tym przykładzie sortujemy listę języków na podstawie ich długości.
>>> jezyki = ['Python','C','Rust','JavaScript'] >>> jezyki.sort(key=len) >>> jezyki ['C', 'Rust', 'Python', 'JavaScript']
W poniższym przykładzie wykorzystujemy funkcję `sorted()` do otrzymania posortowanej listy.
>>> jezyki = ['Hindi','Angielski','Niemiecki','Francuski'] >>> sorted(jezyki,key=len) ['Hindi', 'Niemiecki', 'Francuski', 'Angielski']
W tym przykładzie zarówno „Niemiecki” jak i „Francuski” mają po 6 znaków. Ponieważ funkcja `sorted()` wykonuje stabilne sortowanie, oryginalna kolejność jest zachowana.
#6. Długość tablic NumPy
Możesz także wykorzystać funkcję `len()` z innymi strukturami danych, takimi jak tablice NumPy.
>>> import numpy as np >>> np_tablica = np.array([3,4,6,9]) >>> type(np_tablica) <class 'numpy.ndarray'> >>> len(np_tablica) 4
W tym przypadku `np_tablica` jest wektorem z 4 elementami. Zatem `len(np_tablica)` zwraca 4, czyli liczbę elementów w tablicy.
Macierz to tablica dwuwymiarowa.
Rozważmy poniższy przykład. `len(np_tablica)` wynosi 2, czyli liczbę wierszy.
>>> macierz = [[1,2,3],[4,5,6]] >>> np_tablica = np.array(macierz) >>> np_tablica array([[1, 2, 3], [4, 5, 6]]) >>> len(np_tablica) 2
Aby lepiej to zrozumieć, spójrzmy znowu na zmienną `macierz`. Mamy zagnieżdżoną strukturę list, gdzie zewnętrzna lista zawiera dwie zagnieżdżone listy. Funkcja `len()` zwraca liczbę elementów w kontenerze (w tym przypadku 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 zaczynasz pracę z tablicami wielowymiarowymi, zaleca się używanie atrybutu `shape` zamiast funkcji `len()`.
>>> np_tablica.shape (2, 3)
Typowe błędy, których należy unikać przy korzystaniu z funkcji `len()` w Pythonie
Na zakończenie naszego omówienia, przyjrzyjmy się kilku typowym pułapkom, których należy unikać podczas pracy z funkcją `len` w Pythonie.
Używanie `len()` z typami danych, które nie są iterowalne
Wiemy już, że funkcja `len` przyjmuje jako argument tylko poprawne obiekty iterowalne. Oznacza to, że jeśli wywołasz funkcję `len` z nieprawidłowym typem danych – takim, 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ą efektywnym pod względem pamięci rozwiązaniem w przypadkach, gdy potrzebne jest generowanie sekwencji. Obiekt generatora zwraca elementy sekwencji – na żądanie – po jednym elemencie na raz. Jednak obiekty generatora nie posiadają długości.
Dlatego też, jeśli spróbujesz obliczyć długość obiektu generatora, pojawi się błąd:
>>> numery_kwadraty = (i*i for i in range(10)) >>> numery_kwadraty <generator object <genexpr> at 0x0157DBC0> >>> len(numery_kwadraty) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'generator' has no len()
Używanie `len()` z krotkami jednoelementowymi
Jeżeli wstawisz tylko jeden element do krotki, Python zinterpretuje go jako pojedynczy element, a nie jako krotkę.
Spójrz na ten przykład:
>>> numery = (1) >>> len(numery) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len()
Dlatego, jeśli potrzebujesz krotki zawierającej tylko jeden element, zainicjuj ją w następujący sposób: `nazwa_krotki = (element, )`, aby została potraktowana jako krotka:
>>> numery = (1,) >>> len(numery) 1
Podsumowanie
Oto podsumowanie tego, co omówiliśmy w tym poradniku:
- Liczbę elementów w dowolnym obiekcie iterowalnym można znaleźć za pomocą funkcji `len()` w Pythonie. Składnia funkcji długości to: `len(dowolny-poprawny-obiekt-iterowalny)`.
- Dotyczy to sekwencji, takich jak listy, krotki i ciągi znaków, jak również innych zbiorów, takich jak słowniki i zbiory.
- Funkcja `len()` jest często wykorzystywana w pętlach i wyrażeniach składanych.
- Można również użyć funkcji `len()` jako parametru `key`, aby dostosować proces sortowania według długości, np. sortując listę napisów na podstawie ich długości.
Następnie, naucz się używać funkcji `sum()` w Pythonie.
newsblog.pl