Procházení seznamu cykly
Smyčka for
Pomocí cyklu for
můžete projít položky seznamu jednu po druhé:
zvirata = ["kočka", "pes", "kůň"]
for zvire in zvirata:
print(zvire)
Pomocí funkcí range()
a len()
můžete položky seznamu procházet podle jejich indexu:
zvirata = ["kočka", "pes", "kůň"]
for i in range(len(zvirata)):
print(zvirata[i])
Iterovatelný prvek vytvořený ve výše uvedeném příkladu je [0, 1, 2].
Smyčka while
Pomocí funkce len()
určete délku seznamu, poté začněte na 0 a procházejte se mezi položkami seznamu podle jejich indexů. Nezapomeňte po každé iteraci zvýšit index o jedna:
zvirata = ["kočka", "pes", "kůň"]
i = 0
while i < len(zvirata):
print(zvirata[i])
i += 1
Iterace pomocí seznamových zkratek
Seznamové zkratky (list comprehension) nabízí nejkratší syntaxi pro iteraci přes seznamy:
zvirata = ["kočka", "pes", "kůň"]
[print(zvire) for zvire in zvirata]
Seznamové zkratky (list comprehension) nabízí kratší syntaxi, když chcete vytvořit nový seznam na základě hodnot existujícího seznamu.
Příklad: Ze seznamu zvířat chcete nový obsahující pouze zvířata s písmenem ‚k‘ v názvu. Bez seznamových zkratek byste museli napsat příkaz for s podmínkou uvnitř:
zvirataA = ["kočka", "pes", "kůň", "kráva", "žirafa"]
zvirataB = []
for zvire in zvirataA:
if 'k' in zvire:
zvirataB.append(zvire)
print(zvirataA)
print(zvirataB)
Pomocí seznamové zkratky to můžete udělat jedním řádkem kódu:
zvirataA = ["kočka", "pes", "kůň", "kráva", "žirafa"]
zvirataB = [zvire for zvire in zvirataA if 'k' in zvire]
print(zvirataA)
print(zvirataB)
Syntaxe
nový_seznam = [výraz for položka in iterovatelný_objekt if podmínka == True]
Vrácená hodnota je nový seznam, přičemž původní seznam zůstane nezměněn.
Podmínka funguje jako filtr, který přijímá položky pouze, když je vyhodnocena kladně.
Ukážeme si, co dělat, když se chcete zbavit nějaké krávy:
zvirataA = ["kočka", "pes", "kůň", "kráva", "žirafa"]
zvirataB = [zvire for zvire in zvirataA if zvire != "kráva"]
print(zvirataA)
print(zvirataB)
Podmínka if zvire != "kráva"
vrátí True
pro všechny prvky jiné než "kráva"
. Nový seznam bude obsahovat všechna zvířata kromě nešťastné dojnice.
Podmínka je volitelná a lze ji vynechat:
zvirataA = ["kočka", "pes", "kůň", "kráva", "žirafa"]
zvirataB = [zvire for zvire in zvirataA]
print(zvirataA)
print(zvirataB)
Iterovatelný objekt může být instancí jakékoli iterovatelného datového typu, jako je seznam, n-tice, množina, atd.
Funkci range()
můžete použít k vytvoření iterovatelného objektu:
seznam = [x for x in range(10)]
seznam = [x for x in range(10) if x < 6]
Výraz je aktuální položkou v iteraci, ale je to také mezivýsledek, se kterým můžete manipulovat, než skončí jako položka v novém seznamu:
mala = ["kočka", "pes", "kůň", "kráva", "žirafa"]
velka = [zvire.upper() for zvire in mala]
print(velka)
Výsledek můžete nastavit podle libosti:
zvirata = ["kočka", "pes", "kůň", "kráva", "žirafa"]
klony = ["kočkopes" for zvire in zvirata]
print(klony)
Výraz může také obsahovat podmínku jako způsob manipulace s výsledkem:
zvirata = ["kočka", "pes", "kůň", "kráva", "žirafa"]
klony = ["kočkopes" if zvire in ["kočka", "pes"] else zvire for zvire in zvirata]
klony = ["kočkopes" if zvire in ["kočka", "pes"] else zvire for zvire in zvirata]
print(klony)
Řazení seznamů
Alfanumericky
Seznam má metodu sort()
, která ve výchozím nastavení seřadí seznam alfanumericky:
osoby = ["Petr", "Ivo", "Helena", "Tomáš", "Jan", "Adam", "Eva", "Dalibor"]
osoby.sort()
print(osoby)
osoby.sort(reverse = True)
print(osoby)
cisla = [54, 99, 0.01, 1200, 0.5, 123]
cisla.sort()
print(cisla)
cisla.sort(reverse = True)
print(cisla)
Řazení si můžete přizpůsobit vlastní funkci pomocí argumentu key
.
Funkce vrátí číslo, které bude použito k seřazení seznamu (nejnižší číslo jako první):
def mojeFunkce():
return abs(n-50) # řadí podle blízkosti číslu 50
cisla = [54, 99, 0.01, 1200, 0.5, 123]
cisla.sort(key = mojeFunkce)
print(cisla)
Třídění bez ohledu na velikost písmen
Ve výchozím nastavení metoda sort() řadí velká písmena před malá:
osoby = ["Petr", "Ivo", "helena", "Tomáš", "jan", "adam", "eva", "Dalibor"]
osoby.sort()
print(osoby)
Naštěstí můžeme použít vestavěné funkce jako klíčové při třídění seznamu.
Pokud tedy chcete třídicí funkci bez ohledu na velikost písmen, použijte jako klíčovou funkci str.lower
nebo str.casefold
:
osoby = ["Petr", "Ivo", "helena", "Tomáš", "jan", "adam", "eva", "Dalibor"]
osoby.sort(key = str.lower)
print(osoby)
Metoda reverse()
obrátí aktuální pořadí prvků bez ohledu na abecedu:
osoby = ["Petr", "Ivo", "Helena", "Tomáš", "Jan", "Adam", "Eva", "Dalibor"]
osoby.reverse()
print(osoby)
Kopírování
Seznam nelze zkopírovat jednoduše zadáním seznam2 = seznam1
. Nový seznam2
by byl pouze odkazem na seznam1
a změny provedené v seznamu1
se automaticky provedou také v seznamu2
.
Můžete použít metody copy()
, list()
a :
(slice) operátor:
osoby = ["Adam", "Eva", "Dalibor"]
kopie1 = osoby.copy()
kopie2 = list(osoby)
kopie3 = osoby[:]
kopie4 = osoby # pouze odkaz
osoby.clear()
print(osoby)
print(kopie1)
print(kopie2)
print(kopie3)
print(kopie4) # pouze odkaz
Spojení seznamů
Existuje několik způsobů, jak spojit nebo zřetězit dva nebo více seznamů.
Jedním z nejjednodušších je použití +
operátoru:
osoby = ["Adam", "Eva", "Dalibor"]
cisla = [54, -99, 0.01]
mix = osoby + cisla
print(mix)
Další způsob je přida všechny prvky jeden po druhém smyčkou:
osoby = ["Adam", "Eva", "Dalibor"]
cisla = [54, -99, 0.01]
for prvek in cisla:
osoby.append(prvek)
print(osoby)
Nebo použijte extend()
metodu:
osoby = ["Adam", "Eva", "Dalibor"]
cisla = [54, -99, 0.01]
osoby.extend(cisla)
print(osoby)
Rekapitulace metod seznamu
metoda | popis |
---|---|
append() | Přidá prvek na konec seznamu. |
clear() | Odebere všechny prvky ze seznamu. |
copy() | Vrátí kopii seznamu. |
count() | Vrátí počet prvků se zadanou hodnotou. |
extend() | Přidejte prvky seznamu (nebo libovolného iterovatelného objektu) na konec aktuálního seznamu. |
index() | Vrátí index prvního prvku se zadanou hodnotou. |
insert() | Přidá prvek na zadanou pozici. |
pop() | Odebere prvek na zadané pozici. |
remove() | Odebere položku se zadanou hodnotou. |
reverse() | Obrátí pořadí seznamu. |
sort() | Seřadí seznam. |