Többdimenziós listák elemeinek elérése - trükkök

Minap belefutottam egy olyan dologba, hogy egy beágyazott listákat tartalmazó listák elemeit kellett volna elérnem "sor" és "oszlop" módon.  Ha tovább gondoljuk a dolgot, akkor ez a 2 dimenziós listám így néz ki (az egyszerűség kedvéért dolgozzunk most számokkal:

1  2  3
4  5  6
7  8  9



Ez python listában legyen mondjuk ilyen:
>>> lista=[
... [1,2,3],
... [4,5,6],
... [7,8,9]]

Ha az "5" elemet el akarom érni, akkor ugye azt így teszem:
>>>lista[1][1]
5

Ezt a listát felfoghatjuk adatok sorba és oszlopba rendezett formájának. Mi van akkor, ha a sorokra van szükségem? Nos ez egyszerű, látható, hogy az első index a külső lista elemeit címzi, ezek az én mostani olvasatomban a sor adatok.
>>> lista[0]
[1, 2, 3]
>>> lista[1]
[4, 5, 6]
>>> lista[2]
[7, 8, 9]

De mi van akkor, ha én az oszlopokra vagyok kíváncsi?
Megáll a tudomány... :o

Csinálunk erre a célra egy függvényt!

A függvény nagyon egyszerű, annyit csinál hogy végigszalad a külső lista elemein, és mindegyik így kapott "sor"-ból kiveszi az 'oszlop' indexű elemet, amit egy listához fűz hozzá (eredmeny), majd beállítja ezt az eredménylistát visszatérési értéknek:
# oszlop.py
def oszlop(lista,oszlop):
        eredmeny=[]
        for sor in lista:
                eredmeny.append(sor[oszlop])
        return eredmeny

Ezt a függvényt egy 'oszlop.py' nevű fájlba mentettem el, így bármikor be tudom importálni, ha kell.
>>> from oszlop import *
>>> lista=[
... [1,2,3],
... [4,5,6],
... [7,8,9]
... ]
>>> lista
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> oszlop(lista,0)
[1, 4, 7]
>>> oszlop(lista,2)
[3, 6, 9]

Működik! Ujjé!

2 megjegyzés:

  1. >>> print [x[0] for x in lista]
    [1, 4, 7]
    >>> print [x[2] for x in lista]
    [3, 6, 9]

    VálaszTörlés
  2. Most találtam rá erre a kis beépített függvényre az alapkönyvtár része. :-)

    >>> x = [1, 2, 3]
    >>> y = [4, 5, 6]
    >>> zipped = zip(x, y)
    >>> zipped
    [(1, 4), (2, 5), (3, 6)]

    VálaszTörlés