Podstawy programowania w języku Python I

Listy i krotki

Temat 5 · jedna nazwa, wiele wartości

Listy i krotki

Listy i krotki

Jedna nazwa, wiele wartości:

  • lista [ ]: można ją zmieniać (dokładać, usuwać, sortować)
  • krotka ( ): po utworzeniu się nie zmienia; to rekord o stałych polach

Reguła na cały temat:

  • metoda po kropce (L.sort()) ZMIENIA listę i zwraca None
  • funkcja z listą w nawiasie (sorted(L), len(L)) ZWRACA wynik i listy nie rusza
Listy i krotki · 1

Tworzenie listy

Nawiasy kwadratowe, elementy po przecinku. Lista może być pusta.

Kod
Wynik programu
▶ Całość albo ⏭ Krok[4, 5, 3, 5, 4]
5 0
<class 'list'>
True False
Listy i krotki · 2

Indeksy: numeracja od 0, ujemne od końca

 element:   4   5   3   5   4
 indeks:    0   1   2   3   4
 od końca: -5  -4  -3  -2  -1
Kod
Wynik programu
▶ Całość albo ⏭ Krok4
3
4
4
P n
Listy i krotki · 3

Wycinki: L[start:stop:krok]

start wchodzi, stop NIE wchodzi (jak w range), krok: co który element. Wycinek zawsze tworzy NOWĄ listę.

Kod
Wynik programu
▶ Całość albo ⏭ Krok[1, 2, 3]
[0, 1, 2]
[3, 4, 5]
[1, 2, 3, 4]
[0, 2, 4]
[5, 4, 3, 2, 1, 0]
kajak
[1, 2, 3]
Listy i krotki · 4

Lista jest mutowalna: zmiana elementu i metody

Przypisanie pod indeks podmienia element.

Kod
Wynik programu
▶ Całość albo ⏭ Krok[99, 20, 30]
['Darek', 'Ala', 'Bartek', 'Cela']
['Ala'] Cela Darek
Listy i krotki · 5

Pułapka: metoda zwraca None

append(), insert(), remove(), sort(), reverse() zmieniają listę i zwracają None. Wywołuj je w osobnej linii, BEZ przypisania.

Kod
Wynik programu
▶ Całość albo ⏭ Krok[1, 2, 3]
None
Listy i krotki · 6

Funkcje wbudowane i metody informacyjne

Kod
Wynik programu
▶ Całość albo ⏭ Krok11.2 13.0 36.7
Średnia: 12.23
2
2
[1, 2, 3, 4]
[1, 2, 3, 4]
Listy i krotki · 7

Budowanie listy w pętli

Pusta lista PRZED pętlą, append() W pętli, wynik PO pętli.

Kod
Wynik programu
▶ Całość albo ⏭ Krok[0, 1, 4, 9, 16]
[3, 7, 4]
Listy i krotki · 8

Po elementach czy po indeksach?

for x in L          -> dostajesz wartości (do odczytu)
for i in range(len(L)) -> dostajesz indeksy (gdy trzeba PODMIENIĆ elementy)
Kod
Wynik programu
▶ Całość albo ⏭ Krok[3, 0, 0, 0, 2]
1 4  2 5  3 3  4 5  5 4  
Listy i krotki · 9

Druga nazwa to NIE kopia

B = A daje tej samej liście drugą etykietę. Kopia: copy(), list() albo [:].

Kod
Wynik programu
▶ Całość albo ⏭ Krok[1, 2, 3, 4]
[1, 2, 3, 4] [1, 2, 3, 4, 5]
Listy i krotki · 10

Sortowanie: sort() czy sorted()?

Kod
sort()   -> sortuje W MIEJSCU, zwraca None, oryginalna kolejność przepada
sorted() -> zwraca NOWĄ posortowaną listę, oryginał zostaje
Wynik programu
▶ Całość albo ⏭ Krok['banan', 'gruszka', 'jabłko']
['gruszka', 'jabłko', 'banan']
['banan', 'gruszka', 'jabłko']
[95, 88, 72, 40]
['Zebra', 'ala', 'kot']
['10', '100', '9']
[9, 10, 100]
Listy i krotki · 11

Odwracanie kolejności (to NIE jest sortowanie)

Kod
Wynik programu
▶ Całość albo ⏭ Krok['d', 'c', 'b', 'a']
d c b a 
['d', 'c', 'b', 'a']
Listy i krotki · 12

split() i join(): napis <-> lista

split() tnie napis na listę, join() skleja listę napisów w jeden napis. Separator stoi PRZED kropką: "-".join(lista)

Kod
Wynik programu
▶ Całość albo ⏭ Krok['ala', 'ma', 'kota']
ala-ma-kota
ala, kota, ma
['Anna', '87', 'matematyka']
1 2 3
Listy i krotki · 13

Krotki: rekord o stałych polach

Nawiasy okrągłe. Odczyt jak w liście (indeksy, wycinki, len, in, for), ale zmienić się jej nie da.

Kod
Wynik programu
▶ Całość albo ⏭ KrokAnna 4.5 3
<class 'tuple'>
<class 'tuple'> <class 'int'>
Listy i krotki · 14

Rozpakowanie: pola do osobnych zmiennych

Liczba zmiennych po lewej = liczba pól po prawej.

Kod
Wynik programu
▶ Całość albo ⏭ KrokAnna ma 22 lat i średnią 4.5
5 3
Listy i krotki · 15

Lista krotek = lista rekordów

Każdy element to krotka o tym samym kształcie. Rozpakowanie od razu w nagłówku pętli.

Kod
Wynik programu
▶ Całość albo ⏭ KrokAla: 12.50 s
Bartek: 11.20 s
Cela: 13.00 s
1. Bartek 11.20 s (+0.00 s)
2. Ala 12.50 s (+1.30 s)
3. Cela 13.00 s (+1.80 s)
Listy i krotki · 16

Obliczenia na rekordach: magazyn

Te same wzorce co przy pętlach: akumulator, filtr, szukanie maksimum.

Kod
Wynik programu
▶ Całość albo ⏭ KrokWartość magazynu: 97.00
Najcenniejszy: Mlotki
Do zamówienia: ['Mlotki', 'Gwozdzie']
Listy i krotki · 17

Lista list: tabela

M[wiersz][kolumna]. Przechodzimy dwiema pętlami zagnieżdżonymi.

Kod
Wynik programu
▶ Całość albo ⏭ Krok[[1, 2, 3], [2, 4, 6], [3, 6, 9]]
6
1 2 3
2 4 6
3 6 9
Listy i krotki · 18

Dwie liczby z jednej linii: split + rozpakowanie

Kod
Dane wejściowe
Wynik programu
▶ Całość albo ⏭ Krok8
Listy i krotki · 19

Mini ETL: wiersze tekstu -> lista rekordów

1) split(";")  2) rozpakowanie  3) konwersja typu  4) krotka + append()
Kod
Dane wejściowe
Wynik programu
▶ Całość albo ⏭ Krok[('Ala', 12.5), ('Bartek', 11.2), ('Cela', 13.0)]
Najszybszy: Bartek
Listy i krotki · 20

Typowe błędy

Kod
Wynik programu
▶ Całość albo ⏭ KrokZły wynik: None
A lista i tak: [1, 2, 3]
[20, 30]
[20, 30, 40]
Checkpoint

Co wypisze ten kod?

Co wypisze każda linia? Przy wycinkach rozpisz najpierw indeksy. Potem ▶ Uruchom.

Kod
Wynik programu
Najpierw przewidź wynik, potem ▶ Całość albo ⏭ Krok.[1, 2, 3]
None
[1, 3]
[0, 1, 2]
[5, 4, 3, 2, 1, 0]
Ćwiczenia · temat 5

Zadania: co jest potrzebne

ZadanieNarzędzieZadanieNarzędzie
5.1 Maks. i min.max(), min()5.11 Średnia z częściL[a:b + 1]
5.2 Średnia skrajnychL[0], L[-1]5.12 Mini ETLsplit(",") → krotka
5.3 Łączenie listA + B5.13 Telemetrialicznik, lo <= x <= hi
5.4 Elementy w listęappend()5.14 Rozpakowaniex, y = input().split()
5.5 Lista kwadratówpętla + append()5.15 Krok, odwrócenie[2:7], [::2], [::-1]
5.6 Zera zamiast ujemnychrange(len(L))5.16 join vs pętla"-".join()
5.7 Ile dodatnichlicznik5.17 Lista zakupówkrotki (priorytet, nr, nazwa)
5.8 Ostatni znaks[-1]5.18 Rankingkrotki (czas, imie)
5.9 Sortowaniesorted(), reversed()5.19 Magazynakumulator, filtr, maksimum
5.10 Bez końcówL[1:-1]5.20–5.22warianty dla chętnych
Podsumowanie

Co zapamiętać

Lista czy krotka?

  • Zbiór elementów rośnie, kurczy się albo się zmienia -> lista
  • Stały zestaw pól o ustalonym znaczeniu (imię, czas) -> krotka

sort() czy sorted()?

  • Pierwotna kolejność nie będzie potrzebna -> L.sort() (w osobnej linii)
  • Pierwotna kolejność ma zostać -> nowa = sorted(L)

Notatki prowadzącego · slajd

· D rysuj · C wyczyść · N notatki · S skrypt · F pełny ekran