Informatika1-2014/eloadas4
(Új oldal, tartalma: „=== Listák === Ugyanúgy lehet '''szeletelni (slice)''', összeadni, többszörözni, mint a karakterláncot, de '''a lista változtatható (mutable)''': <python> >>…”) |
(→Lista létrehozása, listaértelmezés (list comprehension)) |
||
36. sor: | 36. sor: | ||
− | ==== | + | ==== Listák kezelése ==== |
A lap 2014. október 7., 10:25-kori változata
Listák
Ugyanúgy lehet szeletelni (slice), összeadni, többszörözni, mint a karakterláncot, de a lista változtatható (mutable):
>>> x = [1, 2, 3, 4] >>> x[:2]*2 + x[-1:] [1, 2, 1, 2, 4] >>> x[:2]*2 + x[-1] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "int") to list >>> x[0::2] [1, 3] >>> x[-1::-1] [4, 3, 2, 1]
Az értékadás (=) csak objektumhivatkozással jár, nem történik adatmásolás. Ennek következtében egy y = x
parancs után, ahol x lista (vagy valamilyen más gyűjteményes adattípus), az y ugyanarra az objektumra fog mutatni. Így ha megváltoztatjuk x-et vagy y-t, változik a másik is. Az objektumhivatkozások megtörténhetnek egy szinttel mélyebben is, a (z = x[:]
kód esetén az x elemeire mutató hivatkozások másolódnak, de ekkor sem jön létre a teljes objektumról másolat. Ezt hívjuk
sekély másolásnak (shallow copy).
Egy másik példa sekély másolásra:
Mély másolás (deep copy), amikor valóban új példány keletkezik az objektumból:
import copy w = copy.deepcopy(x)
Listák kezelése
Lista létrehozható értékadással, [] az üres lista. A range parancs is listát ad vissza:
>>> range(3) [0, 1, 2] >>> range(3, 6) [3, 4, 5] >>> range(1,10,3) [1, 4, 7]