16 užitečných Python One-Liners pro zjednodušení běžných úloh

Chcete psát elegantní a Pythonic kód? Zde je seznam užitečných jednolinkových modulů Pythonu pro provádění jednoduchých úkolů.

Pokud jste začínající programátor Pythonu, strávíte čas pochopením základních datových struktur, jako jsou seznamy a řetězce. A některých operací s těmito datovými strukturami lze dosáhnout prostřednictvím stručných jednořádkových úryvků kódu.

Jako programátor byste měli upřednostňovat čitelnost a udržovatelnost před zkracováním kódu. Ale v Pythonu je snadné přijít s jednolinkami, které dodržují osvědčené postupy kódování.

V tomto článku se zaměříme na jednoduché řádky pro jednoduché úlohy zpracování seznamů a řetězců v Pythonu.

Začněme!

Vygenerujte seznam čísel

Nejjednodušší způsob, jak vygenerovat seznam čísel, je pomocí funkce range(). Funkce range() vrací objekt range, který můžete přetypovat do seznamu. Použití range(num) dá sekvenci 0, 1, 2,.., num-1.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Více o použití funkce range().

Můžete také použít funkci range() spolu s volitelnou hodnotou kroku. Rozsah (začátek, konec, krok) tedy dá sekvenci začátek, začátek + krok, začátek + 2*krok atd. Poslední hodnota bude start + k*step tak, že (start + k*step) < end a (start + (k+1)*step) > end.

Najděte maximální a minimální hodnoty v seznamu

K výpočtu maximálních a minimálních prvků v seznamu můžete použít vestavěné funkce max. a min.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 Poznámka k vícenásobnému přiřazení

  Jak CRM s umělou inteligencí přináší revoluci v prodeji [2023]

Všimněte si, že jsme přiřadili hodnoty jak min_elt, tak max_elt v jediném příkazu přiřazení. Python takové vícenásobné přiřazení podporuje. A to může být užitečné při rozbalování iterovatelných položek a přiřazování hodnot více proměnným současně.

Odebrat duplikáty ze seznamu

Další běžnou operací je odstranění duplikátů ze seznamů Pythonu. To je nezbytné, když potřebujete pracovat pouze s jedinečnými hodnotami. Nejjednodušší způsob, jak toho dosáhnout, je převést seznam na sadu.

Sada je vestavěná datová struktura, jejíž všechny prvky jsou jedinečné a hašovatelné.

>>> nums1 = [2,4,7,9,7,10]

V nums1 se prvek 7 vyskytuje dvakrát. Odesláním do sady se odstraní duplikát (zde 7) a zůstane nám seznam jedinečných hodnot.

Protože stále musíme pracovat se seznamem, převedeme sadu zpět na seznam. Tuto operaci lze provést pomocí následujícího řádku kódu:

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 Chcete-li se dozvědět více o dalších technikách odstranění duplikátů ze seznamů Pythonu, podívejte se na tuto příručku.

Počítejte výskyty v seznamu

Chcete-li spočítat, kolikrát se prvek vyskytuje v seznamu, můžete použít vestavěnou metodu count(). list.count(elt) vrací počet výskytů elt v seznamu.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Zde se 7 vyskytuje jednou v seznamu nums, takže metoda count() vrátí 1.

>>> nums.count(7)
1

Zkontrolujte, zda všechny prvky v seznamu splňují podmínku

Chcete-li zkontrolovat, zda všechny prvky v seznamu splňují podmínku, můžete použít vestavěnou funkci all() v Pythonu.

Funkce all() bere jako argument iterovatelnou hodnotu a vrací True, pokud se všechny prvky v iteraci vyhodnotí jako True (nebo jsou pravdivé).

Zde bychom chtěli zkontrolovat, zda jsou všechny prvky v seznamu nums2 liché.

>>> nums2 = [3,4,7,11,21,67,12]

K vytvoření seznamu booleovských hodnot můžeme použít porozumění seznamu a tento seznam můžeme předat jako argument funkci all().

Zde num%2!=0 bude False pro prvky 4 a 12, které jsou sudé. Proto seznam booleanů vytvořených pomocí výrazu pro porozumění seznamu obsahuje False (a all(list) vrací False).

>>> all([num%2!=0 for num in nums2])
False

💡 Je důležité si uvědomit, že všechny ([]) (vše (jakékoli-prázdné-iterovatelné) vrátí hodnotu True.

Zkontrolujte, zda některý prvek v seznamu splňuje podmínku

Chcete-li zkontrolovat, zda některý prvek v seznamu splňuje podmínku, můžete použít funkci any(). any(some-list) vrátí True, pokud se alespoň jeden prvek vyhodnotí jako True.

>>> nums2 = [3,4,7,11,21,67,12]

Stejně jako v předchozím příkladu používáme porozumění seznamu k získání seznamu booleovských hodnot. Seznam čísel obsahuje sudá čísla. Funkce any() tedy vrátí True.

>>> any([num%2 for num in nums2])
True

Obrátit řetězec

V Pythonu jsou řetězce neměnné, takže když chcete obrátit řetězec, můžete získat pouze obrácenou kopii řetězce. Existují dva běžné přístupy – oba lze napsat jako Python one-liner – které používají krájení řetězců a vestavěné funkce.

  Úvodní příručka a případová studie Google Cloud

Použití String Slicing

Řetězec se zápornými hodnotami kroku vrátí část řetězce začínající od konce. Syntaxe je řetězec[start:stop:step]. Co tedy vrátí nastavení kroku -1 a ignorování indexů start a stop?

Vrací kopii řetězce počínaje koncem řetězce – včetně každého znaku.

>>> str1[::-1]
'olleh'

Pomocí funkce reversed().

Vestavěná funkce reversed() vrací zpětný iterátor přes sekvenci.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

Můžete ji použít ve spojení s metodou join(), jak je znázorněno:

>>> ''.join(reversed(str1))
'olleh'

Převést řetězec na seznam znaků

Předpokládejme, že bychom chtěli rozdělit řetězec na seznam znaků. Můžeme tak učinit pomocí výrazu pro porozumění seznamu.

>>> str1 = 'hello'

Porozumění seznamu jsou jedním z nejvýkonnějších jednořádků v Pythonu.

📒 Zjistěte více o porozumění seznamu v Pythonu.

Procházíme řetězcem a sbíráme každý znak.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

Chcete-li rozdělit delší řetězec na seznam řetězců při každém výskytu mezer, můžete použít metodu split().

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

Už jsme viděli, jak používat porozumění seznamu k rozdělení řetězce na seznam znaků. V tomto příkladu jsme shromáždili všechny znaky procházením řetězce.

Zde musíme procházet řetězec a sbírat pouze číslice. Jak to tedy uděláme?

  • Filtrovací podmínku můžeme nastavit ve výrazu pro porozumění seznamu pomocí metody isdigit().
  • c.isdigit() vrátí True, pokud c je číslice; jinak vrátí False.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Zkontrolujte, zda řetězec začíná konkrétním podřetězcem

Chcete-li zkontrolovat, zda řetězec začíná konkrétním podřetězcem, můžete použít metodu řetězce beginwith(). str1.startswith(substring) vrátí True, pokud str1 začíná podřetězcem. V opačném případě vrátí False.

Zde je několik příkladů:

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

Zkontrolujte, zda řetězec končí konkrétním podřetězcem

Jak jste možná uhodli, ke kontrole, zda řetězec končí daným podřetězcem, můžete použít metodu endswith().

>>> str5 = 'python'
>>> str5.endswith('on')
True

Můžeme také použít řetězcovou metodu uvnitř výrazu pro porozumění seznamu, abychom získali end_with, seznam booleovských hodnot.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

Spojte prvky seznamu do řetězce

Už jsme viděli, jak rozdělit řetězec na seznam znaků. Jak nyní provedeme inverzní operaci spojení prvků seznamu do řetězce?

  Jak opravit problémy se spuštěním Mac pomocí režimu obnovení

K tomu můžete použít řetězcovou metodu join() se syntaxí: separator.join(some-list).

Chtěli bychom pouze spojit prvky v seznamu do jednoho řetězce; nepotřebujeme žádný oddělovač. Nastavíme tedy oddělovač na prázdný řetězec.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

Vytvořte slovník Python

Stejně jako nám výklady seznamů mohou pomoci vytvářet nové seznamy z existujících iterovatelných položek, výklady slovníků nám mohou pomoci vytvářet nové slovníky z existujících iterovatelných položek.

Porozumění slovníku Pythonu jsou výkonné jednoduché nástroje, které mohou pomoci vytvořit slovník za běhu.

Zde máme jména, což je seznam řetězců.

>>> names = ['Joe','Amy','Jake','Florence']

Vytvoříme names_d, slovník obsahující řetězce jmen jako klíče a délky řetězců jako hodnotu.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

Podmíněně přiřaďte hodnoty proměnným

Někdy může být potřeba přiřadit hodnoty proměnným v závislosti na konkrétní podmínce.

Můžete si například přečíst v uživatelském vstupu, řekněme, věk jednotlivce. A v závislosti na vstupní hodnotě se můžete rozhodnout, zda se mohou zúčastnit večírku.

Chcete-li provést toto podmíněné přiřazení v Pythonu, můžete napsat následující jednořádkovou linku pomocí ternárního operátoru.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 Zjistěte více o ternárním operátoru v Pythonu.

Generovat všechny permutace

Permutace označuje možné uspořádání prvků ve skupině. Pokud je ve skupině n jedinečných prvků, je jich n! možné způsoby, jak je uspořádat – a tedy n! permutace.

Použijme následující písmena seznamu:

>>> letters = ['a','b','c']

Pomocí permutací z modulu itertools můžete vygenerovat všechny možné permutace dané iterovatelnosti.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

Jak je vidět, použití permutací (iterovatelných) vrátí permutační objekt, kterým můžeme procházet pomocí cyklu for:

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

Můžeme to však přepsat jako jednořádkový výraz přetypováním permutačního objektu do seznamu:

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Zde jsou tři jedinečné prvky a existuje 3!=6 možných permutací.

Generování podmnožin seznamu

Někdy může být nutné vytvořit všechny možné podmnožiny určité velikosti ze seznamu nebo jiných iterovatelných položek. Použijme seznam písmen a získáme všechny podseznamy velikosti 2.

K tomu můžeme použít kombinace z modulu itertools, například:

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Závěr

V tomto tutoriálu jsme se podívali na užitečné jednořádkové moduly Pythonu k provádění běžných operací se seznamy a řetězci. Naučili jsme se také jednoduché pojmy, jako je seznam Python a porozumění slovníku, a jak je používat ve spojení s vestavěnými funkcemi k provádění požadovaných úkolů.

Jako další krok se podívejte na tento seznam projektů Pythonu pro začátečníky.