Seznam porozumění v Pythonu

List Comprehensions Python



Porozumění seznamu se v Pythonu často používá k psaní jednořádkových příkazů, které vytvářejí nový seznam nebo slovník smyčkou přes iterovatelný objekt. Tento článek vysvětlí, jak používat porozumění seznamu v Pythonu, počínaje základním vysvětlením, jak smyčky v Pythonu fungují.

Pro smyčku v Pythonu

Příkaz for loop v Pythonu postupně iteruje přes členy jakéhokoli objektu, seznamu, řetězce atd. Ve srovnání s jinými programovacími jazyky je jeho syntaxe mnohem čistší a nevyžaduje ruční definování kroků iterace a spouštění iterace. Ačkoli existují způsoby, jak zajistit, aby se jeho chování chovalo stejně jako v ostatních programovacích jazycích (v tomto článku nebude zahrnuto). Můžete také vykonávat určitou kontrolu nad smyčkami pomocí příkazů jako pokračovat, zlomit, projít atd. Níže je jednoduchý příklad smyčky for v Pythonu:







proXv rozsah(10):
tisk(X)

Smyčka for výše vytiskne deset čísel od 0 do 9.



Seznam porozumění

Porozumění seznamu není nic jiného než zkrácený / výstižný způsob psaní víceřádkových smyček v příkazu s jedním řádkem. Níže uvedený příklad porozumění seznamu vytvoří nový seznam jako [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] zahrnutím všech hodnot x do něj.



čísla= [XproXv rozsah(10)]
tisk (čísla)

Pochopení seznamu vždy vytvoří nový seznam a nemění původní iterace použité ve výrazu. Typický výraz pro porozumění seznamu musí mít klauzuli for a může za ní následovat podmíněné příkazy if a else. Bez použití porozumění seznamu bude výše uvedený příklad napsán následujícím způsobem:





čísla= []
proXv rozsah(10):
čísla.připojit(X)

tisk (čísla)

Výkon a čitelnost

Porozumění seznamu je rychlejší než u smyček. Pokud však neopakujete více než stovky tisíc položek, nezaznamenáte zásadní zlepšení výkonu. Zatímco porozumění seznamu poskytuje stručný způsob zápisu pro smyčky, složité výrazy mohou vést ke špatné čitelnosti kódu a zvýšené výřečnosti. Je důležité udržovat kód čitelný, pokud není dosažení maximálního výkonu pro váš program naprostou nezbytností.

Příklad: Použití syntaxe porozumění seznamu se slovníky a sadami

Slovník pythonu je kolekce prvků definovaných v párech klíč – hodnota, zatímco sada je kolekce jedinečných hodnot, kde nejsou povoleny duplikáty. Porozumění seznamu lze použít také se slovníky a sadami Pythonu. Syntaxe se mírně liší, místo zabalení výrazu do hranatých závorek teď budete muset použít složená závorka. Místo nového seznamu také získáte nový objekt slovníku / sady.



data= {'město':'New York', 'název':'john doe'}

formatted_data= {k: v.titul() prok,protivdata.položky()}

tisk (formatted_data)

Výše uvedený příklad převede hodnoty řetězců na velká písmena a vytvoří nový slovník s názvem formatted_data, jehož výstupem bude: {‘city‘: ‘New York‘, ‘name‘: ‘John ​​Doe‘}. Můžete také změnit slovník / nastavit na místě zadáním existující proměnné slovníku na levé straně.

data= {'město':'New York', 'název':'john doe'}

data= {k: v.titul() prok,protivdata.položky()}

tisk (data)

Bez použití porozumění slovníku by kód vypadal takto:

data= {'město':'New York', 'název':'john doe'}

formatted_data= {}

prok,protivdata.položky():
formatted_data[k] =proti.titul()

tisk (formatted_data)

Protože v sadách nejsou žádné páry klíč – hodnota, lze porozumění množině definovat stejným způsobem jako porozumění seznamu. Jediným rozdílem je použití složených rovnátek.

Příklad: Více pro smyčky v seznamu s porozuměním

Výše uvedený příklad porozumění seznamu je základní a používá jediný příkaz. Níže je uveden příklad, který používá pro smyčky násobek a příkaz podmíněné if.

přídavná jména= ['Disk', 'Eoan', 'Ohnisková', 'Artful']

zvířata= ['Dingo', 'Hermelín', 'Jáma', 'Bobr']

kódová jména= [x +''+ aproXvpřídavná jménaproavzvířata-lia.začíná s(X[0])]

tisk (kódová jména)

Kód zobrazí jako výstup [„Disco Dingo“, „Eoan Ermine“, „Focal Fossa“]. Dva pro smyčky procházejí adjektiva a seznamy zvířat a jejich členové jsou spojeni pomocí mezery, pouze pokud je první písmeno obou slov stejné. Bez použití porozumění seznamu by kód vypadal takto:

přídavná jména= ['Disk', 'Eoan', 'Ohnisková', 'Artful']
zvířata= ['Dingo', 'Hermelín', 'Jáma', 'Bobr']

kódová jména= []

proXvpřídavná jména:
proavzvířata:
-lia.začíná s(X[0]):
kódová jména.připojit(x +''+ a)

tisk (kódová jména)

Příklad: Seznam s porozuměním s klauzulí if-else

Následující příklad ukazuje použití příkazů if a else při porozumění seznamu.

number_list= [1, 2, 3, 4]
another_list= [5, 6, 7, 8]

výsledek= [Skutečný -li (x + y)%2 == 0 jiný Nepravdivé proXvnumber_listproavanother_list]

tisk (výsledek)

Při procházení dvěma seznamy výše uvedené porozumění seznamu kontroluje, zda je součet dvojice prvků rovnoměrný nebo ne. Spuštění výše uvedeného kódu vám ukáže jako výstup [True, False, True, False, False, True, False, True, True, False, True, False, False, True, False, True]. Bez použití porozumění seznamu by kód vypadal takto:

number_list= [1, 2, 3, 4]
another_list= [5, 6, 7, 8]
výsledek= []

proXvnumber_list:
proavanother_list:
-li (x + y)%2 == 0:
výsledek.připojit(Skutečný)
jiný:
výsledek.připojit(Nepravdivé)

tisk (výsledek)

Závěr

Porozumění seznamu poskytuje pěkný způsob, jak psát čisté a stručné smyčkové příkazy. Mohou se však rychle stát složitými a obtížně pochopitelnými, pokud je použito více smyček a podmíněných příkazů. Nakonec to přijde na úroveň pohodlí programátora, ale obecně je dobré psát explicitní, čitelný a snadno laditelný kód místo nadměrného používání zkratek.