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

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