Operacje na listach – suma, największy, sortowanie i wyszukiwanie
Materiały tej lekcji są na razie tylko do czytania na stronie. Kod przepisz albo skopiuj do swojego edytora.
Czego się nauczysz
Suma, średnia, największy element, sortowanie – tego nie trzeba liczyć ręcznie w pętli. Python ma na to gotowe funkcje. Na tej lekcji poznasz je oraz jedną pułapkę, na którą wpada prawie każdy: różnicę między sort a sorted.
Po tej lekcji:
- policzysz sumę i średnią z listy,
- wyjaśnisz różnicę między
sortasorted, - sprawdzisz operatorem
in, czy element jest na liście, - będziesz wiedzieć, dlaczego średnia z pustej listy kończy się błędem.
Pięć funkcji, które liczą za ciebie
sum– suma wszystkich elementów,len– ile jest elementów,max– największy element,min– najmniejszy element,sorted– nowa lista, posortowana rosnąco.
oceny = [3, 4, 5, 2, 4]
print(sum(oceny)) # 18
print(max(oceny)) # 5
print(min(oceny)) # 2
print(sorted(oceny)) # [2, 3, 4, 4, 5]
Średnia to złożenie dwóch funkcji
Nie ma osobnej funkcji na średnią i nie jest potrzebna: to sum(lista) podzielone przez len(lista).
srednia = sum(oceny) / len(oceny)
print(f"{srednia:.2f}") # 3.60
Uważaj na pustą listę:lenwynosi wtedy zero, a dzielenie przez zero kończy się błędemZeroDivisionError.
sort kontra sorted – łatwo pomylić
lista.sort()– sortuje listę w miejscu, czyli zmienia oryginał. ZwracaNone.sorted(lista)– tworzy nową posortowaną listę, oryginał zostaje. Zwraca tę nową listę.lista.reverse()– odwraca kolejność w miejscu. ZwracaNone.lista[::-1]– tworzy nową, odwróconą listę.
Klasyczna wpadka:
posortowane = oceny.sort()
print(posortowane) # None!
Po tej linii w zmiennej posortowane siedzi None, a nie lista – a program wywala się dopiero kilka linii dalej, w zupełnie innym miejscu.
Reguła kciuka: metoda z kropką po nazwie listy zwykle zmienia oryginał i nic nie zwraca. Funkcja z listą w nawiasie zwykle tworzy nową listę i zwraca wynik.
Sortowanie malejące: sorted(oceny, reverse=True).
Wyszukiwanie
in– czy element jest na liście. ZwracaTruealboFalse, więc możesz go użyć wprost w warunku.count– ile razy dana wartość pojawia się na liście.index– na której pozycji stoi pierwsze wystąpienie.
oceny = [3, 4, 5, 4]
print(5 in oceny) # True
print(oceny.count(4)) # 2
print(oceny.index(4)) # 1
Usuwanie
remove(wartość)– usuwa pierwsze wystąpienie podanej wartości.pop(indeks)– usuwa element o podanym indeksie i zwraca go.
To nie to samo: remove(4) usuwa czwórkę, gdziekolwiek jest, a pop(4) usuwa piąty element listy.
remove dla wartości, której nie ma na liście, kończy się błędem. Warto najpierw sprawdzić operatorem in.
Spróbuj sam
W kodzie z lekcji znajdź linię wynik = kopia.sort() i sprawdź w wyniku programu, co trafiło do zmiennej wynik. Potem dopisz na końcu własną listę ocen i policz jej średnią.
Zadania z lekcji:
- Dla listy
[3, 5, 2, 4, 6, 3, 5]wypisz: liczbę ocen, sumę, średnią z dwoma miejscami po przecinku, najwyższą, najniższą oraz listę posortowaną rosnąco. - Sprawdź na własnym programie, co zwraca
oceny.sort(), a cosorted(oceny). Wynik obu opisz w komentarzu. - Sprawdź operatorem
in, czy na liście jest ocena 6. Wypisz odpowiedni komunikat w obu przypadkach. - Policz, ile razy na liście występuje ocena 5, i usuń pierwsze jej wystąpienie. Wypisz listę przed i po.
Sprawdź się
- Policzę sumę i średnią z listy.
- Wyjaśnię różnicę między
sortasorted. - Sprawdzę operatorem
in, czy element jest na liście. - Wiem, dlaczego średnia z pustej listy kończy się błędem.
Na następnej lekcji: przechodzenie po liście pętlą – na dwa sposoby. Jeden krótszy, drugi dłuższy, ale ważniejszy, bo jego odpowiednika użyjesz później w C#.
Notatki
Prezentacja
Kod
Otwórz kod, zmieniaj go i uruchamiaj na stronie – np. usuń # z linii oznaczonej jako błąd i zobacz, co się stanie. „Przywróć” wraca do wersji z lekcji.