Programování v Pythonu
Programování v Pythonu (3/21) · 11:41

Seznamy v Pythonu Základních funkce seznamů (lists) v Pythonu

V tomto videu vám chci představit seznam v Pythonu. Je to jeden z nejmocnejších datových typů v Pythonu a ve skutečnosti je to prostě sekvence jiných věcí. Takže seznam v Pythonu může vypadat třeba takhle: tohle by byl to seznam celých čísel. Třeba 1, -7, 0, 0, 5 a 10. A můžeme mít proměnnou odkazující na seznam, takže se k němu můžeme v programu později vrátit. Takže řekněme "a" se rovná tomuhle všemu. A když to spustíme v interpreteru nebo v programu, můžeme se odkázat na položky (prvky) v seznamu "a" a to děláme takhle: (napíšu to zase růžovou) Děláme to odkazem na index položky uvnitř seznamu. Takže když napíšu "a", potom hranaté závorky a do nich 0, tak to říká: nultá položka v "a". Nultá položka... obecná konvence v Pythonu, a platí to ve většině programovacích jazyků, je, že první položka v poli nebo uvnitř seznamu je na nulté pozici. Index této položky je 0. Takže když jsme tohle napsali do interpeteru nebo do programu, bude to vyhodnoceno jako tato položka tady. Bylo by to tato položka, přímo tam. A další příklad: Takže kdybych řekl "a"... To bych neměl říct... Když napíšu druhá položka... druhá položka v "a" toto bude 0. položka, 1. položka, 2. položka... Bude to... Toto bude nula, přímo tady. Takto se odkazuje na položky v seznamu. Už si možná umíte představit zajímavé využití seznamu. Ale co je na seznamech vážně skvělé je, že nemusí být celé z jednoho datového typu. Všechny položky mohou být celá čísla, nebo všechny reálná čísla... nebo všechny znakové řetězce... ale také mohou být namíchané. Takže můžete... vlastně můžete vzít toto "a" přímo tady, a předefinovat jednu z položek, takže můžete říct... můžete říct... pojďme změnit... (udělám to zase růžovou) pojďme změnit... (Já nevím...) tak třeba 4. položku... Změňme 4. položku v "a" na... na řetěžec "this text". Doslova "this text". Doslova "this text". A pokud by jste to udělali... pokud by jste přepsali 4. položku na "this text" a teď vy a váš program řeknete "print"... print a... (vypiš "a") tak "a"... bude vypadat takhle. 0. položka se nezmění, pořád je to 1, 1. položka je stále -7, tyto ... tyto dvě položky budou pořád 0, toto bude 3. položka. Takže toto je nultá položka, 1., 2., 3., 4. Nahrazujeme 4. položku. Takže 4. položka je teď "this text" Teď to bude... toto... nyní bude "this text" druhá... chceme si to vyzkoušet v Python interpreteru... a poslední položka bude... Poslední položka stále bude 10. A toto je úplně platné v Pythonu. Můžete kombinovat datové typy. Ve skutečnosti můžete dokonce, potom, co jste udělali toto, mohli by jste říct, že "a"... Pojďme předefinovat nultou položku v "a", aby byla jiný seznam. Aby byla seznam [-1, -2]. a kdyby jste to udělali, tak tento 0. prvek tady, 0. prvek nyní bude odkazovat na tuhle věc. Takže seznam by nyní vypadal takto: Takže první položka, nebo vlastně nultá položka bude tato věc. [-1, -2] A potom by jste měli -7, 0, 0, "this text"... a nakonec 10, přesně takhle. Takže jsme nahradily nultou položku touto datovou strukturou a možná už si umíte představit užitečné způsoby použití v programu. A jestli ne, nevadí. Ukážeme si je. A teď je tady jedna věc, kterou chci jasně vysvětlit... je, že když... řekněme, že mám... řekněme, že definuji nějaký nový... Řekněme, že mám nějaký list, na který odkazuje proměnná "b"... a řekněme, že tento list je: [7, 13, 15]. Takže to je můj seznam. A řekněme, že... další řádek v programu je... nebo v interpreteru... říká, že "c" je rovné "b". A někdy můžete být v pokušení tohle udělat - hej, chci vytvořit kopii "b". A co já chci vysvětlit v tomto bodě je, "c" a "b" ve skutečnosti odkazují na tu samou věc. Odkazují na tu samou věc, takže když se zamyslíte nad tím, co se děje... V paměti je nějaká věc, která vypadá takhle: [7, 13, 15]. A když toto spustíte, když to spustíte, tak první řádek tady říká podívej se, "b" bude prostě ukazovat na tohle. Když proměnná "b" ukazuje na tuto věc a když řekne, že "c" je rovné "b", tak vlastně říkáte, že "c" bude odkazovat na tu samou věc jako "b". Takže "c" bude odkazovat na přesně tu samou věc. "c" není kopie, neudělali jsme kopii, na kterou by "c" odkazovalo. A co tady důležité je, že pokud teď změníme "c", tak také změníme... nebo když změníme... to, na co "c" odkazuje, tak také změníme to, na co odkazuje "b". A za chvíli vám to ukážu s interpreterem, ale nechtě mě vám ukázat, o čem mluvím. Tak a teď řeknu že "c"... když... na dalším řádeku řeknu, že "c", nultý prvek v "c" musí být rovný jedné. A když bych vám potom řekl, aby jste vypsali "c", tak by jste dostali... dostali by jste [1, 13, 15]. Ale pokud by jste řekli "print b", tak by jste také dostali [1, 13, 15]. A to je protože tento příkaz přímo tady nebo tento příkaz tady... mění, na co první položka seznamu odkazuje. Takže už nebude odkazovat na 7, bude odkazovat na 1. Takže když nyní řeknete "b[0]", tak toto bude rovné 1 and ne 7. Takže můžete říct: "Dobrá, Sal, tomu rozumím, takže pokud přiřadím jedné proměnná druhou proměnnou... která odkazuje na seznam, tak vlastně odkazují na stejnou věc a pokud změním jednu z položek v... v seznamu, na který toto odkazuje, tak vlastně měním, na co odkazuje toto. Takže jak teda můžu kopírovat seznamy?" Jak bych to teda mohl skutečně zkopírovat. A tady použijete... a tady napíšu, když chcete skutečně zkopírovat věci, tak uděláte toto. Napsali by jste "c" se rovná "b" a tohle vám může připadat trochu srandovní... ale sem napíšete dvoutečku a co tohle udělá je, že to zkopíruje všechno v "b" od počátku "b" až do konce "b". Takže by jste taky mohli napsat "c" se rovná "b" a potom říct od 0 až do, ale bez, druhého prvku. Takže tohle přímo tady, tohle by vytvořilo nový seznam, který by byl 0. a 1. prvek. Nebude obsahovat druhý prvek. Takže v tomto případě... takže tento tady by vytvořil nový seznam, který vypadá takhle. To vytvoří... to vypadá jako... pokud předpokládáme, že jsme nezměnili "b" a pokud předpokládáme toto byla naše definice "b", tak to vytvoří nový seznam, který vypadá takto a "c" bude odkazovat na tento nový seznam. Takže "c" bude nyní odkazovat na tento nový seznam. Takže to vytvořilo odkazy na první dva prvky, 0. prvek a 1., ne 2. prvek. Sem by jste museli dát 3, pokud by jste chtěli druhý prvek, takže až do, ale mimo, druhého prvku. Kdyby jste chtěli zkopírovat všechny prvky, tak uděláte toto. Takže toto jednoduše říká od začátku do konce. Takže by to vytvořilo... Vytvořilo by to jiný seznam... Vytvořilo by to jiný seznam, který vypadá stejně jako "b", ale je to jiný seznam. A potom by "c" odkazovalo na tento a teď když zmeníte "c", tak nezměníte "b". Takže dost mluvení, pojdmě si stím skutečně hrát v interpreteru. Protože to je ta zábavná část. Takže řekněme, že máme... smažu tady nějaký text, aby vás to nemátlo. Takže řekněme, že definuji nový seznam. "a" se rovná [1, 2... - napíšu to takto - [1, 2, -7, 9, 11]. Takže jsem ho definoval a můžu si to ověřit. "print a", tady to můžete vidět. Můžeme změnit jeden z prvků v "a". Můžeme říct... můžeme změnit první prvek a pamatujte si, když říkáme, že máme index 1, tak nemluvíme o tomto tady, toto je 0. prvek. Takže měníme tento tady. Takže ho změňmě. Takže jen tak pro srandu... změňme to na řetězec. Takže "Sal's String". A teď se podívejme, jak "a" vypadá. "print a" Takže si všimněte, že to vzalo tohle, index 1, toto je 0. prvek, 1. první prvek. Změnilo to první prvek na "Sal's String" a tady to vidíme. Teď udělejme něco zajímavého. Nastavme "b" na "a". A vypišme... vypišme "b". Takže vypadá jako "a". A nechtě mě udělat něco jiného. Nastavme "c" na "a" a potom udělejme o čem jsem mluvil, udělejme "c" rovné kopii "a". Takže vypišme "c". "print c". Takže "b" a "c" vypadají stejné, ale jsou to dvě rozdílné věci. "c" je kopie "a" nebo resp. "c" je kopie toho, na co "a" odkazuje. "b" je ta věc, na kterou "a" odkazuje a abychom to viděli, změňme první prvek "b" i "c". Takže když změníte první prvek "b", 0. prvek v "b". Nastavme ho na... já nevím... udělejme ho rovný... nule. A teď když vypíšeme "b", tak vydíte, že první prvek je 0. A co taky uvidíte je, že když vypíšete "a", tak první prvek bude nyní 0. Protože odkazují na tu samou věc. Takže to znamenalo, nastav 0. prvek toho, na co "b" odkazuje, na 0. A protože "a" odkazovalo na tu samou věc, tak se to taky změnilo na 0. Ale "c" odkazuje na kopii, takže "c" se změnit nemělo. "c" se nezměnilo. 0. prvek se tady nezměnil ani trochu. Takže tady to máte. Seznamy jsou super mocné, existuje tuna funkcí, které můžete používat se seznamy. Ve skutečnosti vám pár věcí ukážu rovnou tady. Takže tohle je "a", můžete přidávat prvky do "a". Takže můžete říct "a" tečka "append" a můžete něco přídat na konec "a". Takže by jste mohli přidat nový prvek a když to uděláte, tak bude přidaný na konec seznamu. Podívejme se na "a". Přidalo to ten prvek. "b" odkazuje na stejnou věc, tak se podívejme jak vypadá "b". Má nový prvek. "c" odkazuje na kopii starého "a", tak se podívejme, jak to vypadá. Nebyl tam přidán, protože nebyl přidán do kopie. Byl přidán pouze do toho, na co "a" odkazovalo, což bylo to samé jako to, na co ukazovalo "b" a existuje tuna dalších užitečných funkcí, které objevíme až budeme dělat další a další programy, další a další příklady, každopádně existuje hromada užitečných funkcí, nebo metod, které seznamy mají, aby je bylo možné manipulovat a měnit různými způsoby.
video