5. díl - Seznamy v Pythonu, jejich základní funkce a metody

Python Základní konstrukce Seznamy v Pythonu, jejich základní funkce a metody

V minulém díle jsme si ukázali, jak používat cykly v Pythonu. Dnes se podíváme na seznamy a také se naučíme různé funkce, které lze aplikovat i na jiné kolekce. O těch ale až později.

Úvod do seznamů

Představte si, že potřebujete uložit nějaké hodnoty, např. zaměstnance nějaké firmy. A těch hodnot je velké množství (např. 100 osob). Vytvářet si na každou z nich proměnnou je hotové šílenství.

Seznamy

Seznam nám poskytuje způsob, jak ukládat větší množství hodnot přehledně a na jedno místo.

Vytváření seznamů

Seznam se vytváří za pomoci hranatých závorek a jednotlivé prvky v něm oddělíme čárkou.

Příklad:

seznam_1 = []
seznam_2 = [1, 2, 3]
seznam_3 = ["a", "b", "c"]
seznam_4 = ["a", 1, "b", 2]

Seznamy můžeme vytvářet i za pomoci funkcí range() a list(). Funkce range() vrací iterátor, který je převeden na seznam pomocí funkce list. O iterátorech ale až někdy jindy :) Funkci range() jsme již probírali. Pro zopakování syntaxe:

  • range(n) - vrátí čísla od nuly do n-1
  • range(m, n) - vrátí čísla od m do n-1
  • range(m, n, i) - vrátí čísla od m a každé další i-té číslo do n-1

Pár takto vytvořených seznamů:

seznam_1 = list() #prázdný seznam
seznam_2 = list(range(3)) #[0, 1, 2]
seznam_3 = list(range(3, 7)) #[3, 4, 5, 6]
seznam_4 = list(range(1, 10, 2)) #[1, 3, 5, 7, 9]

Jednotlivé prvky

K jednotlivým prvkům seznamu lze přistupovat pomocí indexů. Číslování začíná od nuly. Každý další prvek má číslo větší o 1. To znamená, že první prvek má index 0, další 1, ještě další má index 2 atd.

Seznamy v Pythonu – Indexy

V Pythonu můžeme pro přístup k prvkům použít i záporné indexy. Ty se číslují odzadu. Tudíž poslední prvek má index -1, předposlední -2 atd. K prvkům se přistupuje přes hranaté závorky.

Seznamy v Pythonu – Záporné indexy

Ořezávání

Seznamy lze i ořezávat. To znamená, že ze seznamu získáme jeho část. Syntaxe je stejná, jako v předchozím případě, až na to, že do hranaté závorky se vloží i koncový index, po případně i kolikátý prvek chceme.

Příklady:

Seznamy v Pythonu – Ořezávání

Syntaxe:

  • název_seznamu[m] - vybere jediný prvek
  • název_seznamu[m:n] - vybere prvky v rozsahu mn-1
  • název_seznamu[m:n:i] - vybere m a každý i-tý prvek do n-1

Jednotlivé argumenty určující co chceme vybrat, lze i vynechat. Můžeme tedy napsat [::2] , což vám vybere každý druhý prvek v seznamu.

Pokud není zadaný první prvek, bere se od začátku seznamu (0). Není-li zadaný druhý prvek, bere se konec seznamu. A není-li zadáno o kolik prvků chceme postupovat, bere se to jako 1, tudíž se vezme každý prvek v zadaném intervalu.

Velikost seznamu

Na zjištění velikosti seznamu (či jiného iterovatelného objektu) máme k dispozici funkci len(). Ta vrací počet prvků.

Příklad:

>>> seznam = [1, 2, 3, "a", "b"]
>>> len(seznam)
5

Procházení seznamu

Na procházení seznamu existují tři způsoby:

1) For in

Pomocí jednoduchého cyklu for in získáme jednotlivé prvky. Bohužel je tímto způsobem nemůžeme v procházeném seznamu upravovat. Ale můžeme je například vytisknout.

Syntaxe:

for prvek in seznam:
    print(prvek) #nebo můžeme udělat něco jiného

Při průchodu cyklem se prvek ze seznamu uloží do proměnné prvek a my s ním můžeme něco udělat (např. vytisknout jako v ukázce). Poté se tento prvek "zahodí" a vezme se další prvek ze seznamu.

2) Pomocí funkce range()

Použijeme funkci range(), len() a cyklus for in.

Syntaxe:

for index in range(len(seznam)):
    seznam[index] = seznam[index] + 1 #všechna čísla v seznamu zvětšíme o 1

Pozor! Pokud chceme dělat to samé co v ukázce, musí být seznam pouze z čísel!

Funkce len() nám vrátí počet prvků a tento počet si převedeme na iterátor, který nám vrací indexy od prvního prvku (0) do posledního prvku (velikost seznamu - 1). Poté k prvkům přistupujeme přes indexy.

3) Pomocí funkce enumerate()

Funkce enumerate() vrací index prvku i jeho hodnotu. Za for následuje proměnná i, do které se ukládá index prvku a libovolná proměnná, do které se ukládá hodnota prvku.

Syntaxe:

for i, prvek in enumerate(seznam):
    print(i, prvek) #vytiskneme index prvku a jeho hodnotu

Tímto způsobem získáme jak prvek, tak i jeho index :)

Metody

Metody se na rozdíl od funkcí název_funkce(ná­zev_objektu) mají tuto syntaxi: název_objektu­.název_metody(pa­rametry). Jsou to tedy funkce, které patří nějakému objektu.

V této lekci se naučíme dvě metody - append a pop.

append

Metoda append připojí prvek na konec seznamu.

Příklad:

Seznamy v Pythonu – append
pop

Metoda pop vrátí a odstraní poslední prvek ze seznamu.

Příklad:

Seznamy v Pythonu – append

Funkce

Všechny tyto funkce se dají použít i na jiné iterovatelné objekty, než je seznam.

len()

Vrátí počet prvků iterovatelného objektu.

Příklad:

>>> seznam = [1, 3, 2, 0, 5]
>>> len(seznam)
5
min()

Vrátí z iterovatelného objektu prvek s nejmenší hodnotou.

>>> seznam = [1, 3, 2, 0, 5]
>>> min(seznam)
0
max()

Vrátí z iterovatelného objektu prvek s největší hodnotou.

>>> seznam = [1, 3, 2, 0, 5]
>>> max(seznam)
5
sum()

Vrátí součet prvků v iterovatelném objektu.

>>> seznam = [1, 3, 2, 0, 5]
>>> sum(seznam)
11
sorted()

Seřadí prvky v iterovatelném objektu.

>>> seznam = [1, 3, 2, 0, 5]
>>> sorted(seznam)
[0, 1, 2, 3, 5]

Lze také použít metodu seznamu sort, která seznam rovnou seřadí, jelikož funkce sorted() vrací pouze jeho seřazenou kopii a seznam zůstavá nezměněný.

all()

Vrátí booleovskou hodnotu True, jestliže se všechny prvky v iterovatelném objektu vyhodnotí na True, jinak vrátí False.

>>> seznam_1 = [1, 3, 2, 0, 5]
>>> seznam_2 = [6, 4, 5, 1, 2]
>>> all(seznam_1)
False
>>> all(seznam_2)
True
any()

Vrátí booleovskou hodnotu True, jestliže se alespoň jeden prvek v iterovatelném objektu vyhodnotí na True, jinak vrátí False.

>>> seznam_1 = [1, 3, 2, 0, 5]
>>> seznam_2 = [6, 4, 5, 1, 2]
>>> seznam_3 = []
>>> any(seznam_1)
True
>>> any(seznam_2)
True
>>> any(seznam_3)
False
del

Pomocí del lze jednotlivé prvky ze seznamu mazat za pomoci řezu. Příklad:

>>> seznam = [1, 3, 2, 0, 5]
>>> del seznam[1]
>>> seznam
[1, 2, 0, 5]
>>> del seznam[1:3]
>>> seznam
[1, 5]

A to je pro tento díl vše :)

Příště nás čekají řetězce v Pythonu.


 

  Aktivity (1)

Článek pro vás napsal gcx11
Avatar
(^_^)

Jak se ti líbí článek?
Celkem (10 hlasů) :
4.94.94.94.94.9


 


Miniatura
Předchozí článek
Cvičení k 4. lekci Pythonu
Miniatura
Všechny články v sekci
Základní konstrukce jazyka Python
Miniatura
Následující článek
Cvičení k 5. lekci Pythonu

 

 

Komentáře
Zobrazit starší komentáře (6)

Avatar
gcx11
Redaktor
Avatar
gcx11:

Díky, chybu opravím.

Toto je jen "základ", vše tam nemám, ale přidám to tam. Odstraňovat hodnoty ze seznamu můžeš:

  1. metodou pop(pozice)
  2. metodou remove(prvek)
  3. řezem seznamu
  4. del řez seznamem

Více toho je zde:
http://www.itnetwork.cz/…tice-seznamy

 
Odpovědět  +1 15.6.2014 17:34
Avatar
uramovan
Člen
Avatar
uramovan:

Celkom nerozumiem funkcii all(). Podla coho vyhodnoti prvok ako True? Ak je prvok nenulovy tak je True a ak je to nula alebo zaporne cislo , tak je False?

Editováno 26.4.2015 22:11
 
Odpovědět 26.4.2015 22:09
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na uramovan
Adam Ježek:

Projede cele pole a pokud najde pvek, ktery je false, vrati false, jinak vrati true. Vpodstate vypada nejak takto:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

//napr.

>>>all([True, True, True])
True
>>>all([True, False, True]
False //protoze jeden neni True

A pokud mas pole cisel, tak cisla(kladna i zaporna) bere jako True, jenom nulu jako False

Editováno 26.4.2015 23:01
Odpovědět 26.4.2015 22:59
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
gcx11
Redaktor
Avatar
Odpovídá na uramovan
gcx11:

Jako False se vyhodnocuje 0, prázdný řetězec nebo prázdný list.

 
Odpovědět 27.4.2015 20:29
Avatar
Nevik Qsuluqod:

Nemohl by si mi poradit, potřebuju vyprintovat seznam ale potřebuju aby to bylo bez hranatých závorek, obzvlášť když mám seznam v seznamu dik.

Odpovědět 20.12.2015 18:43
Je těžké naučit se HTML, všude ho učí špatně, a co itnetwork? TO JE BIBLE
Avatar
gcx11
Redaktor
Avatar
gcx11:

Ahoj, na to se jde pomocí rekurze.
Zjistíš zda-li je prvek seznamu seznam, pokud ano, projedeš prvky nového seznamu, pokud ne, můžeš v klidu vytisknout prvek

Pokud budeš potřebovat hezčí výstup, je lepší si pohrát s parametry funkce print

def vytiskni_vnoreny_seznam(seznam):
    for prvek in seznam:
        if isinstance(prvek, list):
            vytiskni_vnoreny_seznam(prvek)
        else:
            print(prvek)
 
Odpovědět 20.12.2015 18:56
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Nevik Qsuluqod
hanpari:
test = [1,2,
            [1,2,3],
            [1,2,
             [1,2,3]],
        4,5]

vysledek = str(test).replace("[","").replace("]","")
print(vysledek)
 
Odpovědět 20.12.2015 20:03
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Nevik Qsuluqod
hanpari:

Anebo takto pro list i tuple:

vysledek = "".join([znak for znak in str(test) if znak not in "[]()"])
 
Odpovědět 20.12.2015 20:07
Avatar
Odpovědět 21.12.2015 0:03
Je těžké naučit se HTML, všude ho učí špatně, a co itnetwork? TO JE BIBLE
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Nevik Qsuluqod
hanpari:

Není zač, jen poznámka na okraj. Moje první řešení nepoužívej, to byla jen ukázka, zbytečně dělá totéž dvakrát. A v druhém řešení si vyhoď seznamovou komprehenzi. Je tam myslím zbytečná.

 
Odpovědět 21.12.2015 14:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 16. Zobrazit vše