Listy, krotki, słowniki, funkcje Listy Lista jest najbardziej elastycznym typem obiektu uporządkowanej kolekcji. Może zawierać różne typy danych - liczby, łańcuchy znaków, a nawet inne listy. Tworzy się ją następująco: warzywa = [" kalafior ", " rzodkiewka ", " brukselka "] Można też utworzyć pustą listę: pusta = [] Do poszczególnych elementów listy można się dostać przez indeks. Elementy listy są numerowane od zera. >>> warzywa [0] >>> kalafior >>> warzywa [ -2] # drugi element od konca >>> rzodkiewka Listy są typem modyfikowalnym, w związku z czym można dowolnie zmieniać ich elementy. >>> warzywa [0] = " pietruszka " >>> warzywa [0] >>> pietruszka Listy nie mają z góry ustalonej wielkości. Elementy można dodawać stosując wbudowaną metodę append(). Ilość elementów sprawdzamy funkcją len(lista) >>> cyferki = [3, 4, 1, 5, 0] >>> cyferki. append (2) 1
Podobnie jak w łańcuchach znaków można wyświetlać wycinki list. W wypadku zastosowania poniższej notacji wypisywanie rozpoczynamy od indeksu przed dwukropkiem, a kończymy na ineksie o 1 mniejszym niż ten po dwukropku. nr elementu = indeks + 1 >>> warzywa [2:] # wyswietli elementy od indeksu 2 go do ostatniego >>> warzywa [:2] # wyswietli elementy od poczatku do indeksu 1 go >>> warzywa [:] # wyswietli wszystkie elementy Chcąc poznać pozycję danego elementu korzystamy z metody index >>> warzywa. index (" rzodkiewka ") >>> 1 Chcąc wstawić element na danej pozycji korzystamy z insert(pozycja, element) >>> warzywa. insert (1, "por ") >>> warzywa >>> [ pietruszka, por, rzodkiewka, brukselka ] Aby wykonać taką samą operację dla wszystkich elementów z listy można skorzystać z pętli for: >>> for numer in liczby : >>> numer ** 2 Aby usunąć element z listy można skorzysać z polecenia: >>> del warzywa [0] lub >>> warzywa. remove (" brukselka ") Z racji tego, że jak każdy typ danych, lista jest obiektem, ma ona swoje wbudowane funkcje i metody: Funkcje : cmp ( list1, list2 ) # Porownuje elementy dwoch list len ( list ) # Zwraca dlugosc listy max ( list ) # Zwraca element o najwiekszej wartosci min ( list ) # Zwraca element o najmniejszej wartosci list ( seq ) # Konwertuje krotke ( tuple ) na liste Metody : list. append ( obj ) # Dodaje obiekt obj do listy 2
list. count ( obj ) # Zwraca liczbe wystapien obiektu obj w liscie list. extend ( seq ) # Dodaje zawartosc seq do listy ( np. inna liste lub krotke ) list. index ( obj ) # Zwraca najnizszy indeks wystapienia obj w liscie list. insert ( index, obj) # Wstawia do listy obiekt obj na pozycje o indeksie index list. pop ( obj = list [ -1]) # Usuwa i zwraca ostatni obiekt lub obj z listy list. remove ( obj ) # Usuwa obiekt obj z listy list. reverse () # Odwraca liste list. sort ([ func ]) # Sortuje elementy listy, uzywa funkcji porownania, jesli jest podana Krotki (tuple) Krotka jest ogólnie rzecz biorąc listą, której nie da się zmodyfikować. Obsługują one dowolne typy danych, zagnieżdżanie i zwykłe operacje na sekwencjach. >>> T = (1, 2, 3, 4) >>> len (T) >>> 4 Krotki można konkatenować: >>> T + (5, 6) >>> (1, 2, 3, 4, 5, 6) Można też konwertować na listę: >>> list (T) W związku z tym, że krotki są sekwencjami niezmiennymi (lub inaczej niemodyfikowalnym typem danych), posiadają mniej metod wbudowanych niż np. listy. T. index (2) # zwraca indeks pod jakim znajduje sie wartosc 2 T. count (4) # zlicza wystapienia elementu 4 w krotce W krotkach można zagnieżdżać inne sekwencje. 3
>>> U = (" mielonka ", 32542.33, (2,3,4)) >>> U [2][1] >>> 3 W praktyce krotki są używane rzadziej niż listy. Jednak ich zdecydowaną zaletą jest ich niezmienność. Słowniki Słowniki są bardzo podobne do list, z tą różnicą, że do poszczególnych elementów dostaje się za pomocą klucza zamiast indeksu. Klucz może być stringiem lub liczbą. d = { key1 : 1, key2 : 2, key3 : 3} W słownikach wystepują pary klucz - wartość. Bardzo dobrze się sprawdzają np. dla zbioru numerów telefonów, gdzie trzeba przyporządkować numer do nazwiska lub przy stronach logowania, gdzie trzeba sparować nazwy użytkowników z emailami. Do słowników można wstawiać listy. Dostęp do wartości w słowniku po kluczu odbywa się tak samo jak dostęp do wartości z listy po indeksie. d[ key1 ] # otrzymanie wartosci 1 Słowniki tak jak listy są modyfikowalne. moj_ slownik [ nowy_ klucz ] = nowa_ wartosc Elementy mogą być usuwane przy użyciu del: del moj_ slownik [ klucz ] Funkcje Funkcja jest uporządkowanym, zdolnym do wielokrotnego użycia fragmentem kodu, odpowiadającym za wykonanie pojedyńczej czynności. Dzięki funkcjom można wykonywać tę samą czynność stosując inne wartości (parametry funkcji). def wypisz_ mnie ( string ): """ Ta funkcja wypisuje podany string w konsoli """ print string return >>> zdanie = " Cos do powiedzenia " >>> wypisz_mnie ( zdanie ) # Wywolanie funkcji >>> Cos do powiedzenia 4
W tym wypadku zmienna string jest parametrem funkcji wypisz_mnie, natomiast zmienna zdanie jest jej argumentem. Parametry są nazwami zmiennych dla wartości przekazywanych w argumentach. Wszystkie argumenty w Pythonie są przekazywane przez referencję. To znaczy, że jeśli wewnątrz funkcji zostanie zmienione to, do czego odnosi się dany argument, ta zmiana będzie obowiązująca zarówno wewnątrz funkcji jak i poza nią. def changeme ( mylist ): """ Funkcja zmienia przekazana liste """ mylist. append ([1,2,3,4]) print " Values inside the function : ", mylist return # Wywolanie funkcji changeme >>> mylist = [10,20,30] >>> changeme ( mylist ) >>> print " Values outside the function : ", mylist Values inside the function : [10, 20, 30, [1, 2, 3, 4]] Values outside the function : [10, 20, 30, [1, 2, 3, 4]] Można temu zapobiec nadpisując referencję wewnątrz funkcji: # Function definition is here def changeme ( mylist ): """ Funkcja nie zmienia przekazanej listy """ mylist = [1,2,3,4] # Przypisanie nowej referencji do lokalnej zmiennej print " Values inside the function : ", mylist return # Wywolanie funkcji changeme >>> mylist = [10,20,30] >>> changeme ( mylist ) >>> print " Values outside the function : ", mylist Values inside the function : [1, 2, 3, 4] Values outside the function : [10, 20, 30] Chcąc podać nieokreśloną liczbę argumentów, można skorzystać z konstrukcji: def smallest (* args ): return min ( args ) >>> smallest (19, 29, 394, 33) 5
Argumentem funkcji może być też lista. Funkcje mogą wywoływać się nawzajem. def func_one (p): return p + 1 def func_two (p): return func_one (p) + 2 Funkcje też są rozumiane jako typy danych, mogą być zatem argumentami dla innych funkcji. Wyrażenie return zwraca wartość kończąc funkcję. Jeśli funkcja nie zwraca żadnej wartości, używa się samego return. Ćwiczenia Wykonaj zadania zapisując każde z nich osobno w pliku.py. 1. Napisz funkcję, która sprawdzi, czy podany argument jest liczbą, zwracając adekwatnie True lub False. Następnie stwórz funkcję obliczającą kwadrat podanej przez użytkownika liczby, korzystając z poprzedniej funkcji w celu sprawdzenia, czy podany argument jest liczbą. Wyświetl stosowne komunikaty. 2. Korzystając z odpowiedniego typu danych stwórz menu restauracji. Dodaj do niego 10 pozycji razem z cenami. Utwórz funkcje: wyświetlającą elementy menu, usuwającą i dodającą pozycje do menu, stosując odpowiednie argumenty. 3. Korzystając z odpowiedniego typu danych stwórz sekwencję samogłosek. Napisz funkcję, która wypisze podstawowe parametry tego zbioru: ilość elementów, ilość powtórzeń dla każdego elementu i same elementy. 4. Korzystając z odpowiedniego typu danych stwórz wykaz zwierząt w zoo. Dodaj 15 pozycji. Napisz funkcję, która argument sortuje zwierzęta alfabetycznie i w zależności od podanej flagi True/False odwraca ich kolejność. Stwórz nową sekwencję tego samego typu przechowującą nazwy zwierząt domowych i dodaj do niej pięć. Połącz oba zbiory. Napisz funkcję, która w zależności od podanego parametru wypisuje minimalną lub maksymalną liczbę w powstałej sekwencji. 5. Stwórz funkcję, która jest w stanie przyjąć dowolną ilość pojedyńczych parametrów (nie będącą listą, krotką ani słownikiem), która wypisuje ilość 6
podanych argumentów oraz ich wartość minimalną. 6*. Stwórz funkcję a przyjmującą za parametr funkcję b i wywołując ją wewnątrz siebie. 7
Źródła M. Lutz, Python - wprowadzenie, Helion, 2011 https://www.codecademy.com/courses/learn-python https://www.tutorialspoint.com/python 8