HALLOWEEN JE TADY: Získej 66 % extra kreditů zdarma při nákupu od 1199 kreditů s promo kódem NEBOJSEIT66. Zjisti více:
NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:

Diskuze – Lekce 12 - Seznam v Pythonu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Jan Roubíček:11. února 17:39

Seznamy / pole / kolekce / sekvence ???

 
Odpovědět
11. února 17:39
Avatar
Veronika Viková:31. března 16:47

Nazev_seznamu[m] - vybere jediný prvek - v příkladu je [6:] a ta vybere 6,7,8,9 a bez dvojtečky mi to hlásí chybu:-/
Nikde jsem nenašla vysvětlení, proč textové řetězce musí být v uvozovkách, i když z příkladu je to patrné.
A proč je v příkladu na konci středník a ne dvojtečka? pozice = simpsons.index(sim­pson);

 
Odpovědět
31. března 16:47
Avatar
Jakub Janáček:4. dubna 15:13

Dle mého názoru by si lekce zasloužila rozděleni na dvě :)

 
Odpovědět
4. dubna 15:13
Avatar
t.teichmanova:3. května 11:03
# Trochu jsem změnila prográmek na metodu 'index'
simpsons = ["Homer", "Marge", "Bart", "Lisa", "Maggie"]
simpson = input("Ahoj, zadej svého oblíbeného Simpsona (z rodiny Simpsonů): ")
if simpson in simpsons:
    pozice = simpsons.index(simpson);
    print(f"{simpson}, to je můj {pozice+1}. nejoblíbenější Simpson!")
else:
    print("Hele, tohle není Simpson!")
# T.T.
 
Odpovědět
3. května 11:03
Avatar
Jan Runštuk :8. srpna 17:00

Vubec to nezvladam. Myslel jsem že začatečník, je na jiny urovní. momenatlně si připadam,, že nemam na to byt ani začwatečnik v programovaní. vůbec to nechapu a neleze mi to do hlavy , za čím přemýslět kde csehnat peníze abych zaplatil pracuku peníze zpět. přijde mi to vše hrozně nerozumně napsany .asi jen můj dojem. grrrrrrrrrrrr­rrrrrrrrrrrrrrrrrrrrrrrr­rrrrrrrrrrrrrrrrrrrrrrrr­rrrrrrrrrrrrrrrrrrr

 
Odpovědět
8. srpna 17:00
Avatar
DarkCoder
Člen
Avatar
DarkCoder:8. srpna 21:07

Tak tohle je solidní snůška nesmyslů s nulovým obsahem a přidanou hodnotou. Teoretický výklad seznamu v Pythonu je zcela chybný – od způsobu uložení v paměti, přes nepochopení práce s typy, až po zavádějící a nicneříkající srovnání s C/C++. Nechápu, jak něco takového může být publikováno jako výukový materiál, který projde vstupní kontrolou. A že tomu 1247 čtenářů dalo pět hvězdiček, aniž by tušili, co všechno je v článku špatně, je už jen smutná tečka.

Odpovědět
8. srpna 21:07
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na DarkCoder
David Hartinger:19. srpna 15:15

Ahoj, teoretický výklad seznamů v úvodu lekce je naprosto v pořádku. Pouze v kapitole Výhody seznamu byla jedna nebo dvě věty ke kompilovaným jazykům, tyto věty jste odstranili. Srovnání s C/C++ je také korektní. Cením, že jsi nahlásil chybku, ale vážně nechápu tolik humbuku kolem toho, polovina z toho co píšeš není pravda a bylo to v lekci správně.

Odpovědět
19. srpna 15:15
New kid back on the block with a R.I.P
Avatar
DarkCoder
Člen
Avatar
Odpovídá na David Hartinger
DarkCoder:19. srpna 17:22

Ahoj, teoretický výklad seznamů v úvodu lekce je naprosto v pořádku. Srovnání s C/C++ je také korektní.

nechápu tolik humbuku kolem toho, polovina z toho co píšeš není pravda a bylo to v lekci správně.

Ahoj, mohu Tě tedy poprosit o to, aby se školitel Pythonu podíval na tento článek (stačí mi úvodní odstavec - Seznam) a potvrdil či vyvrátil tvá slova o naprosté správnosti v diskuzi ve formě komentáře?

Ke svým slovům a validitě obsahu článku se následně i já rovněž blíže vyjádřím.

Děkuji.

PS: Není to rýpání ani dehonestace kohokoli, ale zpětná vazba ke zkvalitnění obsahu článku a uvedení věcí na pravou míru.

Odpovědět
19. srpna 17:22
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:26. srpna 15:58

Nikdo se neozval, beru to tedy tak, že považujete odstavec Seznam za naprosto správný. Je tomu ale vážně tak?

Potřebujeme-li uchovávat větší množství proměnných stejného typu, tento problém nám řeší seznam. Můžeme si ho představit jako řadu přihrádek, kdy v každé máme uložený jeden prvek.

Chceme uchovávat hodnoty, ne proměnné. Navíc seznam v Pythonu není omezen jen na data stejného typu.

Programovací jazyky se velmi liší v tom, jak se seznamem pracují. V některých jazycích (zejména starších, kompilovaných) nebylo možné za běhu programu vytvořit seznam s dynamickou velikostí (např. mu dát velikost podle nějaké proměnné).

Tady je třeba předem říci, že nelze vůbec zaměňovat seznam za pole. V C pojem seznam evokuje akorát spojový seznam, což je ale úplně něco jiného. A pokud bylo myšleno pole tak to není pravda. Třeba v C už od C89 lze tohle dělat.

1D pole:

#include <stdlib.h>

int main(void) {
    int velikost = 10;

    int *pole = (int *)malloc(velikost * sizeof(int));
    if (pole == NULL) return 1;

    free(pole);

    return 0;
}

2D pole:

#include <stdlib.h>

int main(void) {
    int radek = 3;
    int sloupec = 5;
    int i;

    int **pole = (int **)malloc(radek * sizeof(int *));
    if (pole == NULL) return 1;

    for (i = 0; i < radek; i++) {
        pole[i] = (int *)malloc(sloupec * sizeof(int));
        if (pole[i] == NULL) return 1;
    }

    for (i = 0; i < radek; i++) {
        free(pole[i]);
    }
    free(pole);

    return 0;
}

Seznam se musel deklarovat s konstantní velikostí přímo ve zdrojovém kódu. Toto se obcházelo tzv. pointery a vlastními datovými strukturami, což často vedlo k chybám při manuální správě paměti a k nestabilitě programu (např. v C++).

Nic konstantního se deklarovat nemuselo. Po lehké úpravě lze třeba načíst hodnoty z klávesnice a ty použít pro velikosti polí. V C/C++ se navíc nic neobcházelo, způsob, jakým toho bylo dosahováno bylo skutečně za pomocí ukazatelů, což ale není obcházení ale vlastnost jazyka. A z programu výše je vidět, jak je alokace a dealokace snadná. Chyba je tak akorát v nezkušenosti programátora.

Tyto druhy seznamů se často označují jako pole.

To opět není pravda, pole a seznam je něco jiného, funguje úplně jinak. Seznam v Pythonu je vlastně dynamické pole ukazatelů na objekty. To znamená, že prvky seznamu jsou reference na objekty nikoli přímo hodnoty. Pro velmi primitivní představu si to lze představit tak jak uvádí obrázek, ale ve skutečnosti to je úplně jinak. Takže obrázek neukazuje to jak je to skutečně v Pythonu.

Jak víme, Python je interpretovaný programovací jazyk, takže neposkytuje pole s pevnou velikostí.

Co má společného interpretace s tím, že nelze vytvářet pole s pevnou velikostí? Nic! Když už tak souvislost je s tím že Python je dynamicky typovaný.

Python jako interpretovaný jazyk používá dynamické seznamy (list) jako výchozí strukturu pro práci s kolekcemi hodnot. Pokud však potřebujeme pole s pevnou velikostí nebo specifickým datovým typem, můžeme použít moduly jako array nebo numpy. Interpretace jazyka nemá vliv na dostupnost těchto struktur.

Toliko k chybám jen v odstavci - Seznam. Takže říci to, že teoretický výklad seznamu a srovnání s C/C++ je korektní, je naprosto mylné.

Odpovědět
26. srpna 15:58
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Daniel Sekerák:15. října 17:28

Trošku náročné na pochopenie :)

 
Odpovědět
15. října 17:28
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 70.