Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 12. diel - Zoznam v Pythone

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Jan Roubíček:11. februára 17:39

Seznamy / pole / kolekce / sekvence ???

Avatar
Veronika Viková:31. marca 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);

Avatar
Jakub Janáček:4. apríla 15:13

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

Avatar
t.teichmanova:3. mája 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.
Avatar
Jan Runštuk :8. augusta 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

Avatar
DarkCoder
Člen
Avatar
DarkCoder:8. augusta 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.

Odpovedať
"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
Odpovedá na DarkCoder
David Hartinger:19. augusta 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ě.

Odpovedať
New kid back on the block with a R.I.P
Avatar
DarkCoder
Člen
Avatar
Odpovedá na David Hartinger
DarkCoder:19. augusta 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.

Odpovedať
"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. augusta 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é.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Daniel Sekerák:15. októbra 17:28

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

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 72.