📚 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).
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]