0%

📚 Saraksti un kolekcijas

Python piedāvā četrus galvenos kolekcijas tipus: list (mainīgs secīgs), tuple (nemainīgs), dict (atslēgas–vērtība), set (unikāli elementi).

python

list – Saraksts

Teksts
# Izveidošana
tukšs = []
skaitļi = [1, 2, 3, 4, 5]
jaukts  = [1, "divi", 3.0, True, None]  # Dažādi tipi vienā sarakstā

# Indeksēšana (sākas no 0, negatīvie no beigām)
print(skaitļi[0])    # 1  (pirmais)
print(skaitļi[-1])   # 5  (pēdējais)
print(skaitļi[-2])   # 4  (pirmsēdējais)

# Šķēlums [start:stop:step]
print(skaitļi[1:4])   # [2, 3, 4]
print(skaitļi[:3])    # [1, 2, 3]
print(skaitļi[2:])    # [3, 4, 5]
print(skaitļi[::-1])  # [5, 4, 3, 2, 1] – apgriezts

# Mainīšana
skaitļi[0] = 99
print(skaitļi)   # [99, 2, 3, 4, 5]

# Metodes
augļi = ["ābols", "bumbieris"]

augļi.append("ķirsis")         # Pievienot beigās
augļi.insert(1, "aprikozs")    # Pievienot pozīcijā
augļi.extend(["vīnogas", "plūme"])  # Pievienot no cita saraksta
print(augļi)
# ["ābols", "aprikozs", "bumbieris", "ķirsis", "vīnogas", "plūme"]

augļi.remove("bumbieris")      # Noņemt pēc vērtības (pirmo)
noņemts = augļi.pop()          # Noņemt un atgriezt pēdējo
noņemts2 = augļi.pop(0)        # Noņemt un atgriezt pēc indeksa

augļi.sort()                   # Kārtot (alfabētiski / augošā)
augļi.sort(reverse=True)       # Dilstošā kārtībā
sakārtots = sorted(augļi)      # Jauns kārtots saraksts (oriģināls nemainās)

augļi.reverse()                # Apgriezt secību
print(len(augļi))              # Garums
print(augļi.count("ābols"))    # Cik reizes parādās
print(augļi.index("ābols"))    # Pirmā atrašanās vieta

kopija = augļi.copy()          # Virspusēja kopija
augļi.clear()                  # Iztīrīt visu

# Noderīgas operācijas
a = [1, 2, 3]
b = [4, 5, 6]

c = a + b           # Savienot: [1, 2, 3, 4, 5, 6]
d = a * 3           # Pavairot: [1, 2, 3, 1, 2, 3, 1, 2, 3]

print(3 in a)       # True  – pārbaude
print(7 not in a)   # True

# Izsaiņošana (unpacking)
pirmais, *vidus, pēdējais = [1, 2, 3, 4, 5]
print(pirmais)  # 1
print(vidus)    # [2, 3, 4]
print(pēdējais) # 5

tuple – Nemainīgais saraksts

Teksts
# Izveidošana
coords = (52.5, 13.4)   # Platums, garums
vienkārš = (1,)          # Viens elements – obligāts komats!
bez_iekavām = 1, 2, 3    # Iekavas nav obligātas

# Indeksēšana un šķēlums – tāpat kā list
print(coords[0])     # 52.5
print(coords[::-1])  # (13.4, 52.5)

# Nemainīgs – šī koda rindiņa radītu kļūdu:
# coords[0] = 99    # TypeError!

# Izsaiņošana
x, y = coords
print(f"Lat: {x}, Lon: {y}")

# Swap bez papildu mainīgā
a, b = 10, 20
a, b = b, a
print(a, b)   # 20 10

# Kā funkcijas atgriešanas vērtība
def min_max(saraksts):
    return min(saraksts), max(saraksts)   # Atgriež tuple

mazākais, lielākais = min_max([3, 1, 7, 2, 9])
print(mazākais, lielākais)   # 1 9

# namedtuple – tuple ar nosauktiem laukiem
from collections import namedtuple

Punkts = namedtuple("Punkts", ["x", "y"])
p = Punkts(3, 4)
print(p.x, p.y)   # 3 4
print(p)           # Punkts(x=3, y=4)

dict – Vārdnīca

Teksts
# Izveidošana
tukša = {}
persona = {"vārds": "Anna", "vecums": 25, "pilsēta": "Rīga"}
no_pāriem = dict([("a", 1), ("b", 2)])
no_atslēgām = dict.fromkeys(["x", "y", "z"], 0)   # {x:0, y:0, z:0}

# Piekļuve
print(persona["vārds"])           # "Anna"
print(persona.get("telefons"))    # None (bez kļūdas!)
print(persona.get("telefons", "nav norādīts"))   # "nav norādīts"

# Maiņa un pievienošana
persona["vecums"] = 26            # Atjaunot
persona["amats"] = "Programmētāja"  # Pievienot jaunu atslēgu

# Dzēšana
del persona["pilsēta"]
noņemtais = persona.pop("amats")  # Noņem un atgriež
persona.pop("neeksistē", None)    # Drošs pop ar noklusējumu

# Iterācija
for atslēga in persona:
    print(atslēga)                  # Atslēgas

for vērtība in persona.values():
    print(vērtība)                  # Vērtības

for atslēga, vērtība in persona.items():
    print(f"{atslēga} = {vērtība}")  # Abi

# Noderīgās metodes
d = {"a": 1, "b": 2}

d.update({"b": 99, "c": 3})   # Apvienot/pārrakstīt
print(d)   # {"a": 1, "b": 99, "c": 3}

# Merge ar | (Python 3.9+)
d2 = {"d": 4}
d3 = d | d2
print(d3)   # {"a": 1, "b": 99, "c": 3, "d": 4}

# Pārbaude
print("a" in d)          # True
print("x" not in d)      # True

# setdefault – ieraksta, ja atslēgas nav
d.setdefault("e", 0)
print(d["e"])   # 0

# Dict comprehension
kvadrāti = {x: x**2 for x in range(6)}
print(kvadrāti)   # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# Filtrēt vārdnīcu
lieli = {k: v for k, v in kvadrāti.items() if v > 10}
print(lieli)   # {4: 16, 5: 25}

set – Kopa (unikāli elementi)

📌 Kuru izmantot?

  • list – sakārtoti dati, var atkārtoties, vajag mainīt
  • tuple – sakārtoti nemainīgi dati (koordinātas, RGB)
  • dict – atslēgas–vērtību pāri, ātrs meklēšana
  • set – unikālas vērtības, kopas operācijas
Teksts
# Izveidošana (iekavas {}, bet vērtības – nevis atslēga:vērtība)
kopa = {1, 2, 3, 4}
no_saraksta = set([1, 2, 2, 3, 3, 3])   # {1, 2, 3} – dublikāti noņemti
tukša_kopa = set()   # NEVIS {} – tas būtu dict!

# Matemātiskās kopas operācijas
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

print(a | b)    # Savienojums: {1, 2, 3, 4, 5, 6}
print(a & b)    # Šķēlums:    {3, 4}
print(a - b)    # Starpība:   {1, 2}   (a, bet ne b)
print(a ^ b)    # Simetriskā: {1, 2, 5, 6} (vienā, bet ne abos)

# Metodes
kopa.add(5)        # Pievienot elementu
kopa.remove(2)     # Noņemt (kļūda, ja nav)
kopa.discard(99)   # Noņemt (bez kļūdas, ja nav)
x = kopa.pop()     # Noņemt nejauši izvēlētu

# Pārbaude
print(1 in a)               # True
print(a.issubset({1, 2, 3, 4, 5}))    # True – a ⊆ lielākas
print(a.issuperset({1, 2}))           # True – a ⊇ mazākas
print(a.isdisjoint({7, 8}))           # True – nav kopīgu

# Praktisks lietojums: unikālo vārdu skaitīšana
teksts = "rīga viļņa rīga tallina rīga viļņa"
vārdi = teksts.split()
unikālie = set(vārdi)
print(f"Unikālie vārdi ({len(unikālie)}): {unikālie}")

# Noņemt dublikātus no saraksta (saglabājot kārtību Python 3.7+)
ar_dublikātiem = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
unikāli = list(dict.fromkeys(ar_dublikātiem))
print(unikāli)   # [3, 1, 4, 5, 9, 2, 6]