Syntaxe, příklady a případy použití

Při práci s iterovatelnými položkami Pythonu je běžnou operací zjištění počtu položek, které iterovatelné položky obsahují. Naučte se používat vestavěný len Pythonu k nalezení délky iterovatelných a mnohem více.

Python nabízí sadu vestavěných datových struktur a sadu metod, jak s nimi pracovat. Navíc jsou zde vestavěné funkce, které se při práci s těmito datovými strukturami hodí. Jednou z takových funkcí je len(), která udává počet položek přítomných v iterovatelné.

V tomto tutoriálu se naučíme, jak používat funkci len() se seznamy, n-ticemi, řetězci a dalšími. Uvidíme také několik běžných případů použití.

Začínáme!👩‍🏫

Syntaxe funkce len() Pythonu

Zde je syntaxe pro použití funkce len Pythonu:

len(iterable)

Jak je vidět, funkce len() vyžaduje jeden parametr, který je libovolný platný iterovatelný. Iterovatelný je často seznam, n-tice nebo řetězec. Ale může to být i jakýkoli jiný platný typ.

Vidíme, že syntaxe pro použití funkce len() je super jednoduchá. Dále pojďme kódovat několik příkladů.

📑 Pro příklady kódu v tomto tutoriálu můžete kódovat v Python REPL.

Použití funkce len() s Iterables

Se sekvencemi

Funkci len() můžete použít k nalezení délky iterovatelných položek, jako jsou seznamy, n-tice a řetězce.

Zde je příklad:

>>> nums = [9,3,6,1,2]
>>> len(nums)
5

>>> nums_tup = (9,3,6,1,2)
>>> len(nums_tup)
5

U těchto datových struktur, které ukládají sekvenci, budete podle potřeby obvykle přistupovat k prvkům pomocí jejich indexu nebo získat řez (podsekvenci).

S dalšími kolekcemi

Funkci len() můžete také použít s jinými kolekcemi Pythonu, jako jsou sady a slovníky.

  7 nostalgických halloweenských webových stránek z 90. a 20. století

Tyto datové struktury jsou neuspořádané kolekce. I když vás nemusí zajímat řazení položek, je stále užitečné získat celkový počet položek ve sbírce.

>>> nums_set = set(nums)
>>> len(nums_set)
5

>>> prices = {'Notebook':5,'Pencil case':7,'Bookmarks':3,'Pens':1,'Markers':8}
>>> len(prices)
5

Běžné případy použití funkce len() Pythonu

Dosud jsme viděli jednoduché příklady použití funkce len() k získání počtu položek v iterovatelné. Nyní se podívejme, kde to můžeme použít v praxi.

#1. Iterace pomocí pro smyčky

Smyčka Python for poskytuje konstrukci pro procházení iterovatelných položek v položce for v iterovatelné syntaxi. Pokud však chcete přistupovat k indexu každé položky namísto položky samotné nebo k indexu i položkám dohromady, můžete použít funkci range(), jak je uvedeno:

>>> nums = [9,2,4,7,8]
>>> for i in range(len(nums)):
...      print(f"Index {i}: {nums[i]}")

Protože range(N) udává posloupnost celých čísel 0,1,2,…,N – 1, pomocí range(len(nums)) získáme sadu platných indexů, které je třeba procházet.

# Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

Doporučený způsob Pythonic pro přístup k indexu i prvku je však pomocí funkce 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. Podmíněné opakování pomocí smyček while

Řekněme, že máte seznam čísel nus. Metoda seznamu pop() odstraní poslední položku v seznamu a vrátí ji.

Dokud je délka seznamu čísel len(nums) větší než nula, existuje alespoň jeden prvek, který lze odstranit.

>>> nums = [9,2,4,7,8]
>>> while len(nums) > 0:
...     nums.pop()
# Output
8
7
4
2
9

Výše uvedený příklad je explicitnějším způsobem, jak napsat následující:

>>> nums = [9,2,4,7,8]
>>> while nums:
...     nums.pop()

while nums: je ekvivalentní podmínce „zatímco seznam nums není prázdný“.

#3. Kontrola a ověření délky iterovatelných položek

Další běžné použití funkce len je při kontrole a ověřování délky určitých iterovatelných položek.

Zde zkontrolujeme, zda je uživatelské jméno platným řetězcem na základě délky (vypočtené pomocí funkce 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. Seznam a porozumění slovníku

Přehledy v Pythonu poskytují stručnou syntaxi pro vytváření nových iterovatelných z existujících. Ve výrazu porozumění můžeme použít vestavěné funkce.

  14 nejlepších šablon plánování projektu k dokumentaci výstupů a fází

Porozumění seznamu

V tomto přehledu seznamu používáme funkci len() k získání délky každého řetězce v seznamu jazyků.

>>> languages = ['Python','C','Rust','JavaScript']
>>> len_langs = [len(lang) for lang in languages]
>>> len_langs
[6, 1, 4, 10]

Porozumění slovníku

V tomto pojetí slovníku používáme seznam jazyků a funkci len() k vytvoření slovníku:

>>> languages = ['Python','C','Rust','JavaScript']
>>> lang_len = {lang:len(lang) for lang in languages}
>>> lang_len
{'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}

Zde jsou klíče a hodnoty jazykové řetězce a délka jazykových řetězců.

#5. Klíčový parametr ve vlastním třídění

Python má vestavěnou metodu sort() k řazení seznamů Pythonu na místě a funkci sort() k řazení seznamů a dalších iterovatelných položek.

V obou z nich můžete použít parametr key k přizpůsobení řazení.

Zde třídíme seznam jazyků podle délky řetězce.

>>> languages = ['Python','C','Rust','JavaScript']
>>> languages.sort(key=len)
>>> languages
['C', 'Rust', 'Python', 'JavaScript']

Ve úryvku níže používáme funkci sort() k získání seřazeného seznamu.

>>> languages = ['Hindi','English','German','French']
>>> sorted(languages,key=len)
['Hindi', 'German', 'French', 'English']

V tomto příkladu mají „němčina“ i „francouzština“ každý 6 znaků. Protože funkce sort() provádí stabilní řazení, je zachováno řazení v původním seznamu.

#6. Délka NumPy Arrays

Funkci len() můžete také použít s jinými datovými strukturami, jako je NumPy pole.

>>> import numpy as np
>>> np_array = np.array([3,4,6,9])
>>> type(np_array)
<class 'numpy.ndarray'>
>>> len(np_array)
4

V tomto případě je np_array vektor se 4 prvky. Takže len(np_array) vrátí 4, počet prvků přítomných v poli.

Matice je dvourozměrné pole.

Zvažte následující příklad. len(np_array) je 2, což je počet řádků.

>>> 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

Pro pochopení se vraťme k matrixu. Máme strukturu vnořených seznamů, kde vnější seznam obsahuje dva vnořené seznamy. A funkce len() vrací počet položek v kontejneru (zde se jedná o dva seznamy):

>>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

Jakmile však začnete pracovat s vícerozměrnými poli, doporučuje se místo toho použít atribut shape.

>>> np_array.shape
(2, 3)

Běžná úskalí, kterým je třeba se vyhnout při používání funkce len() Pythonu

Abychom naši diskuzi uzavřeli, pojďme si projít některá běžná úskalí, kterým byste se měli vyhnout při používání funkce len v Pythonu.

  10 nejlepších loveckých her, které zažijí vzrušení z honičky

Použití len() s neopakovatelnými datovými typy

Víme, že funkce len bere jako argument pouze platné iterovatelné položky. To znamená, že pokud zavoláte funkci len s – neplatným datovým typem – který nelze iterovat, narazíte na chyby.

Takové neplatné typy zahrnují základní datové typy, jako jsou celá čísla, čísla s plovoucí desetinnou čárkou a booleovské hodnoty:

>>> 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()

V Pythonu jsou generátory paměťově efektivní volby pro případy použití, které vyžadují generování sekvence. Objekt generátoru vrací prvky sekvence – na vyžádání – jeden prvek po druhém. Ale objekty generátoru nemají délku.

Pokud se tedy pokusíte vypočítat délku objektu generátoru, dostanete se k chybám:

>>> 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()

Použití len() s n-ticemi délky jedna

Pokud prvek vložíte pouze do n-tice, Python jej interpretuje jako jeden prvek a ne jako n-tice.

Zde je příklad:

>>> nums = (1)
>>> len(nums)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

Takže když máte n-tici pouze s jedním prvkem, inicializujte jej v tomto tvaru: název_n-tice = (elt, ), aby byl interpretován jako n-tice:

>>> nums = (1,)
>>> len(nums)
1

Shrnutí

Zde je souhrn toho, co jsme probrali v tomto tutoriálu:

  • Počet položek v libovolné iterovatelnosti můžete zjistit pomocí funkce len() v Pythonu. Syntaxe pro použití funkce length je: len(any-valid-iterable).
  • To zahrnuje sekvence, jako jsou seznamy, n-tice a řetězce. A další sbírky, jako jsou slovníky a sady.
  • Funkce len() se běžně používá v cyklech a porozuměních.
  • Funkci len() můžete také použít jako klíčový parametr, když potřebujete přizpůsobit řazení podle délky. Například: řazení seznamu řetězců na základě jejich délky.

Dále se naučte, jak používat Pythonovu funkci sum() .