Listy, slowniki, krotki i wyrazenia listowe w Pythonie
ð Podstawa programowa: II.1+II.2Lista to uporzadkowany zbior elementow, ktory moze przechowywac dane roznych typow. Listy sa mutowalne - mozna je zmieniac po utworzeniu:
oceny = [5, 4, 3, 5, 6, 4]
imiona = ["Anna", "Jan", "Kasia"]
mieszana = [1, "tekst", True, 3.14]
# Operacje na listach
oceny.append(5) # dodaj element na koniec
oceny.insert(0, 6) # wstaw na pozycje 0
oceny.remove(3) # usun pierwsza trojke
ostatnia = oceny.pop() # usun i zwroc ostatni element
oceny.sort() # sortuj rosnaco
print(len(oceny)) # dlugosc listy
Wycinki pozwalaja na pobranie fragmentu listy:
dane = [10, 20, 30, 40, 50, 60, 70]
print(dane[2:5]) # [30, 40, 50]
print(dane[:3]) # [10, 20, 30]
print(dane[4:]) # [50, 60, 70]
print(dane[::2]) # [10, 30, 50, 70] - co drugi
print(dane[::-1]) # [70, 60, 50, 40, 30, 20, 10] - odwrocona
Slownik przechowuje pary klucz-wartosc. Klucze musza byc unikalne:
uczen = {
"imie": "Jan",
"nazwisko": "Kowalski",
"wiek": 17,
"oceny": [4, 5, 3, 5]
}
print(uczen["imie"]) # Jan
uczen["klasa"] = "2TI" # dodaj nowy klucz
del uczen["wiek"] # usun klucz
# Iteracja po slowniku
for klucz, wartosc in uczen.items():
print(f"{klucz}: {wartosc}")
Krotka to niemutowalna (niezmienna) lista. Uzywamy jej, gdy dane nie powinny byc modyfikowane:
wspolrzedne = (52.23, 21.01) # Warszawa
kolory_rgb = (255, 128, 0)
x, y = wspolrzedne # rozpakowywanie krotki
Zwiezly sposob tworzenia list na podstawie istniejacych danych:
# Kwadraty liczb od 1 do 10
kwadraty = [x**2 for x in range(1, 11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# Tylko liczby parzyste
parzyste = [x for x in range(1, 21) if x % 2 == 0]
# [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# Dlugosci slow
slowa = ["Python", "jest", "super"]
dlugosci = [len(s) for s in slowa]
# [6, 4, 5]
Napisz program, ktory pobiera od uzytkownika ciag liczb (zakonczony zerem) i zapisuje je do listy. Nastepnie oblicz i wyswietl: srednia, minimum, maksimum, mediane oraz sume.
liczby = []
while True:
n = float(input("Podaj liczbe (0 konczy): "))
if n == 0:
break
liczby.append(n)
if liczby:
liczby.sort()
n = len(liczby)
srednia = sum(liczby) / n
mediana = liczby[n // 2] if n % 2 == 1 else (liczby[n//2 - 1] + liczby[n//2]) / 2
print(f"Suma: {sum(liczby)}")
print(f"Srednia: {srednia:.2f}")
print(f"Min: {min(liczby)}, Max: {max(liczby)}")
print(f"Mediana: {mediana}")
Stworz slownik reprezentujacy dziennik ucznia z przedmiotami jako kluczami i listami ocen jako wartosciami. Napisz funkcje: dodaj_ocene(dziennik, przedmiot, ocena), srednia_przedmiot(dziennik, przedmiot), najlepsza_srednia(dziennik).
def dodaj_ocene(dziennik, przedmiot, ocena):
if przedmiot not in dziennik:
dziennik[przedmiot] = []
dziennik[przedmiot].append(ocena)
def srednia_przedmiot(dziennik, przedmiot):
oceny = dziennik.get(przedmiot, [])
return sum(oceny) / len(oceny) if oceny else 0
def najlepsza_srednia(dziennik):
najlepszy = max(dziennik, key=lambda p: srednia_przedmiot(dziennik, p))
return najlepszy, srednia_przedmiot(dziennik, najlepszy)
dziennik = {}
dodaj_ocene(dziennik, "Matematyka", 4)
dodaj_ocene(dziennik, "Matematyka", 5)
dodaj_ocene(dziennik, "Informatyka", 6)
dodaj_ocene(dziennik, "Informatyka", 5)
print(f"Srednia z matematyki: {srednia_przedmiot(dziennik, 'Matematyka'):.2f}")
przedmiot, sr = najlepsza_srednia(dziennik)
print(f"Najlepsza srednia: {przedmiot} ({sr:.2f})")
Uzyj wyrazen listowych do: a) stworzenia listy kwadratow liczb nieparzystych od 1 do 20, b) wybrania z listy imion tylko tych zaczynajacych sie na "A", c) stworzenia slownika {liczba: liczba**3} dla liczb od 1 do 10.
# a) Kwadraty liczb nieparzystych
kwadraty = [x**2 for x in range(1, 21) if x % 2 == 1]
print(kwadraty)
# b) Imiona na "A"
imiona = ["Anna", "Bartek", "Ala", "Adam", "Basia", "Alicja"]
na_a = [im for im in imiona if im.startswith("A")]
print(na_a)
# c) Slownik szescianow
szesciany = {x: x**3 for x in range(1, 11)}
print(szesciany)
Napisz program, ktory wczytuje tekst od uzytkownika i za pomoca slownika zlicza czestotliwosc wystapien kazdego slowa. Wyswietl 5 najczesciej wystepujacych slow (uzyj metody sorted() z parametrem key).
tekst = input("Podaj tekst: ").lower()
slowa = tekst.split()
czestotliwosc = {}
for slowo in slowa:
slowo = slowo.strip(".,!?;:")
czestotliwosc[slowo] = czestotliwosc.get(slowo, 0) + 1
top5 = sorted(czestotliwosc.items(), key=lambda x: x[1], reverse=True)[:5]
print("Top 5 najczestszych slow:")
for slowo, ile in top5:
print(f" {slowo}: {ile}")