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 – 4. diel - Viacrozmerné zoznamy 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
DarkCoder
Člen
Avatar
Odpovedá na David Hartinger
DarkCoder:16. septembra 20:27

Numpy Manual:

Row-major order is also known as the C order, as the C programming language uses it. New NumPy arrays are by default in row-major order.

V kontextu Pythonu, zejména u 2D seznamů (list of lists) a NumPy polí, platí tato jasná a konzistentní konvence:

První index vždy udává řádek (počet řádků)
Jinými slovy:

pole[i][j] → i = řádek (y), j = sloupec (x)

Tématem článku jsou vícerozměrné seznamy v Pythonu a zde platí toto pořadí.

list v Pythonu → list[row][column]
numpy.array → array[row, column]

Nikde netvrdím, že je na uspořádání column-mayor order něco špatného. To se v grafice skutečně používá, kde řádky představují výšku, sloupce šířku. Ale to je jiné téma.

**Mé příspěvky v diskuzi, které jsou naprosto nepochopitelně a mylně považovány za útok na kokokoli v redakci ITNetwork, kteří druzí viditelně ocení, nemají žádný útočný charakter ale edukativní a věcný. O to víc mě překvapilo, že na základě těchto příspěvků došlo k vyhrožování banem a obvinění, že „motám studentům hlavu“.

Upřímně celý tvůj komentáří vypadá spíš jako útok, pochopit 2D pole můžeš přeci na čtverci i obdélníku, děláš jako by to bylo celé špatně. Máš pravdu, že na obdélníku to je ještě lepší, a zvážím jeho použití, ale čtvercová mřížka vážně není nevhodná ukázka pro pochopení 2D pole.

Ano, z pohledu edukativního hlediska to je špatně. Čtenář s obtížemi rozpozná detaily. A reakce ostatních v diskuzi má slova potvrzují. Je to apel na to upravit článek na obdelníkový tvar. Tak to zvaž. Kdybych neměl zájem na zkvalitnění, tak své postřehy do fóra vůbec nedávám. A že už jsem jich dal.

Respekt ke všem co se snaží pomoci druhým mám, neměj obavy.

Vážím si práce autorů i platformy, ale domnívám se, že otevřená diskuse o přesnosti a srozumitelnosti článků je důležitou součástí komunity. Tímto považuji diskuzi na toto téma za uzavřenou a doufám že i jasně srozumitelnou.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na David Hartinger
Denisa Ďobeková :23. novembra 18:26

ja si myslím, že nenapísal to až tak útočne a ja som "zatiaľ" študent a vzájomný rešpekt by mohol byť trošku aj z vašej strany (tým nemyslím konkrétne teba) treba si trošku priznať aj chybu niekedy.

Avatar
Odpovedá na David Hartinger
Denisa Ďobeková :24. novembra 13:44

v texte sa píše Prvé číslo predstavuje číslo stĺpca (súradnicu X),
druhé číslo číslo riadku (súradnicu Y), čo je
najčastejší spôsob, ako sa odkazovať na dáta v tabuľke.... ale potom namiesto aby sme išli smer doprava po ixe(pretože hore sa píše, x je stĺpec) ideme namiesto toho po iYlone(čo by mal byt riadok). Dobre čisté teoreticky by mal toto rozloženie ovplyvňovať ešte kód predtým v ktorom bol uvedený stĺpec?

Avatar
DarkCoder
Člen
Avatar
DarkCoder:24. novembra 17:30

Proč je tak důležité zachovávat jednotný styl 2D seznamu:

Chceme-li dosáhnout následujcího vzoru:

0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1

Inicializace:

kinosal = [
    [0, 0, 0, 0, 0],  # řádek 0
    [0, 0, 0, 0, 0],  # řádek 1
    [0, 0, 1, 0, 0],  # řádek 2
    [0, 1, 1, 1, 0],  # řádek 3
    [1, 1, 1, 1, 1]   # řádek 4
]

Jedná se o list of rows. Každý vnitřní seznam je řádek, první index = řádek, druhý index = sloupec.

To co se ale vytváří zde:

kinosal = []
for j in range(5):
    sloupec = []
    for i in range(5):
        sloupec.append(0)
    kinosal.append(sloupec)
# naplnění daty
kinosal[2][2] = 1 # střed
for i in range(1, 4): # čtvrtá řada
    kinosal[i][3] = 1
for i in range(5): # poslední řada
    kinosal[i][4] = 1

To je list of columns.

Výsledkem je:

0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1

To jsou dvě odlišné struktury. A nebude pro ně fungovat stejný způsob výpisu.

Výpisy:

C-style:

for r in range(len(kinosal)):
    for c in range(len(kinosal[0])):
        print(kinosal[r][c], end=" ")
    print()

Pythonic:

for radek in kinosal:
    for prvek in radek:
        print(prvek, end=" ")
    print()

Enumerate:

for _, radek in enumerate(kinosal):   # _ ignoruje index řádku
    for _, prvek in enumerate(radek):  # _ ignoruje index sloupce
        print(prvek, end=" ")
    print()

Nechceme měnit způsob výpisu jen pro to že se změnil způsob vytvoření 2D seznamu.

Proto i použijeme pro iteraci řádků, první index. A j použijeme pro iteraci sloupců, druhý index.

# Dynamické vytvoření kinosálu 5x5 jako list of rows
kinosal = []
for i in range(5):            # vnější smyčka přes řádky
    radek = []
    for j in range(5):        # vnitřní smyčka přes sloupce
        radek.append(0)
    kinosal.append(radek)

# Naplnění daty
kinosal[2][2] = 1  # střed
for j in range(1, 4):  # čtvrtá řada, sloupce 1-3
    kinosal[3][j] = 1
for j in range(5):  # poslední řada
    kinosal[4][j] = 1

nebo

# Dynamické vytvoření kinosálu 5x5 jako list-of-rows
kinosal = []
for r in range(5):              # iterujeme přes řádky
    radek = [0] * 5             # vytvoříme řádek s 5 nulami (sloupci)
    kinosal.append(radek)

# Naplnění daty
kinosal[2][2] = 1  # střed
for c in range(1, 4):  # čtvrtá řada, sloupce 1-3
    kinosal[3][c] = 1
for c in range(5):  # poslední řada
    kinosal[4][c] = 1

Pokud chceme zachovat jednotný výpis, vždy držíme první index pro řádky a druhý pro sloupce.

Pythonic, C-style i enumerate výpisy pak fungují konzistentně, ať už je seznam inicializovaný nebo dynamicky vytvořený.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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é 4 správy z 54.