270 likes | 411 Views
Operacje na kontenerach. 1) Listy i krotki. list (arg) . >>> list ((5,10)) [5,10] funkcja zwraca argument jako listę. filter (funkcja, lista) zwraca wszystkie elementy listy dla których funkcja zwraca wartość true. Def JestAla (s) return s.find('ala') == -1.
E N D
Operacje na kontenerach 1) Listy i krotki • list (arg) >>> list ((5,10)) [5,10] funkcja zwraca argument jako listę • filter (funkcja, lista) • zwraca wszystkie elementy listy dla których funkcja zwraca wartość true
Def JestAla (s) return s.find('ala') == -1 >>> s=['ala' , 'fala', 'python', 'ciągnik'] >>>filter(JestAla,s) ['python', 'ciągnik'] • map (funkcja, lista) – zwraca rezultat wykonania funkcji dla każdego elementu listy • >>> import string • >>>s=['tomek', 'ziomek'] • >>>map(string.capitalize,s) • >>>['Tomek', 'Ziomek']
reduce (funkcja, lista) >>> import operator >>> reduce(operator.mul,[2,3,4,5]) 120 # 120 = (((2*3)*4)*5) Funkcja pobiera dwie pierwsze dane z listy, wykonuje na nich działanie, dalej działa na zwróconym wyniku i kolejnej zmiennej aż do wyczerpania danych.
zip(lista) >>> zip ([1,2], [3,4]) [(1,3),(2,4)] Funkcja pobiera odpowiadające sobie elementy w sekwencjach i tworzy z nich krotki.
2) Operacje tylko dla list • append (obiekt), extend (obiekt) Append dodaje jeden element do listy, extend dodaje do listy druga listę. >>>lista1=['python'] >>>lista1.append('c++') >>>lista1 >>>['python','c++'] >>>lista1.extend['java', 'c#'] >>>lista1 >>>['python','c++','java','c#']
index(obiekt) Zwraca pierwszy element w liście który ma taką samą wartość jak obiekt. Jeśli nie ma takiego wyrzuca wyjątek ValueError. • count (obiekt) • zwraca ile elementów w liście = obiekt • insert (indeks, obiekt) • wstawia obiekt do listy przed miejscem podanym w parametrze 'indeks' • >>>miesiace=['luty', 'marzec'] • >>>miesiace.insert(0,' maj') • >>>miesiace • ['maj','luty','marzec']
remove (obiekt) Znajduje pierwsze wystąpienie obiektu w liście i usuwa je. >>>miesiace.remove('maj') >>>miesiace ['luty','marzec'] • pop(indeks) • usuwa element listy o zadanym indeksie • i zwraca go. Jeśli nie podano argumentu usuwa ostatni element z listy. • >>> miesiace.pop[0] • >>> 'luty'
reverse() Odwraca kolejność elementów w liście. >>>obiad=['schabowy','udko','mielony'] >>>obiad.reverse() >>>obiad ['mielony', 'udko','schabowy'] • sort(funkcja) • sortuje elementy z listy, można podać własną funkcję sortującą.
3) Słowniki • tworzenie,dodawanie i zmiana wartości klucza • >>>obiady = {'kotlety':('schabowy,'mielony'), 'ryby':'dorsz'} • >>>obiady['kotlety'] • ('schabowy,'mielony') • >>>obiady['ryby']=('mintaj','pstrąg') • Wyjątki i bezpieczne użytkowanie • jeśli chcemy użyć klucza, który nie istnieje w słowniku wyskoczy nam wyjątek KeyError. Dla bezpieczeństwa używajmy funkcji get(klucz) i setdefault(klucz)
>>>obiady.get('pierogi', 'Nie podajemy pierogów') 'Nie podajemy pierogów setdefault() dodaje parę klucz-wartość do słownika jeśli podany klucz jeszcze nie istnieje, w przeciwnym wypadku zwraca obecną wartość dla klucza. >>>obiady.setdefault('ryby','płotka') >>>('mintaj, 'pstrag') # zwraca obecną wartość >>>obiady.setdefault('pierogi',('ruskie','z miesem')) ('ruskie,'z miesem') • has_key(key) – sprawdza czy w słowniku istnieje podany klucz • >>>obiady.has_key('ryby') • 1 • >>>del obiady['ryby'] #usuwa ze słownika • >>obiady.has_key('ryby') • 0
Update (słownik) – dodaje elementy z jednego słownika do drugiego • >>>dane={'login':'haslo'} • >>>obiady.update(dane) • >>>obiady • {'ryby':('mintaj','pstrag'), 'login':'haslo','kotlety':('schabowy','mielony')} • len(slownik) – zwraca liczbe elementów w słowniku • keys() - wyświetla listę kluczy ze słownika • values() - wyświetla listę wartości ze słownika • items() - wyświetla klucze i wartości w postaci krotek • clear() - kasuje wszystko
popitem() - usuwa losowo wybrany klucz i jego wartości • Usuwanie calego słownika metodą popitem(): • >>>d={'one':1, 'two':2, 'three':3} • >>>try • while 1: • print d.popitem() • except KeyError: • print ''pusto'' • ('one',1) • ('two',2) • ('three',3) • pusto
TABLICE W odróżnieniu od list i krotek tablice muszą zawierać elementy tego samego typu: >>> import array >>> z = array.array ('B') # tworzy tablice bajtów >>> z.append(5) >>>z[0] 5 >>> q=array.array('i', [5,10]) # i – unsigned int >>> q array('i',[5, 10]) Kody typów dla tablic – Python Bible str.69
KONWERSJE MIĘDZY TYPAMI • tolist() - konwertuje tablicę do listy • >>> q.tolist() • [5,10] • fromlist(lista) – dodaje elementy z listy na koniec tablicy • >>> q.fromlist([2,4]) • >>> q • array ('i', [5,10,2,4]) • jeśli któryś z obiektów w liście jest innego typu niż typ tablicy to fromlist() nie dodaje żadnego elementu.
tostring() - konwertuje tablicę do typu napisowego • >>> z=array.array('i',[1]) • >>> z.tostring() • '\x01\x00\x00\x00' • fromstring(string) – do typu tablicowego • >>> z.fromstring('\x01\x00\x00\x00') • >>> z • array('i', [1,1])
tofile(file) - zapisuje tablice do pliku • >>> z=array.array('h', [10,1000,500]) • >>> f=open('myarray', 'wb') • >>>z.tofile(f) • >>f.close() • fromfile(file,liczba) - czyta określoną liczbę elementów z pliku i dodaje do tablicy. • >>>z.fromfile(open('myarray','rb'),3) • >>>z • array('h', [10, 1000, 500, 10, 1000, 500])
Funkcje omówione wcześniej dla list: len,append,extend,count,index,insert,pop,remove, reverse działają również dla tablic.
WEJŚCIE I WYJŚCIE >>> print ''Witam'' Witam def drukuj() print ''co tam'', # dzięki ',' nie przejdzie do nast.linii print ''słychać?” >>drukuj() co tam słychać?
def drukuj() print ''co tam'', sys.std.out.softspace=0 # brak spacji między # wydrukami print ''słychać?” >>drukuj() co tamsłychać?
raw_input() - pobiera linię ze standardowego wejścia i zwraca ja jako napis. • >>> s= raw_input() • Python • >>>print s • Python • >>> s= raw_input('Podaj swoje imię:') • Podaj swoje imię: Tomek • >>> s • Tomek
input() - tak jak raw_input tylko dodatkowo zakłada, że wejście jest poprawnym wyrażeniem Pythona i zwraca oszacowaną wartość. • >>>input ('Podaj jakieś wyrażenie pythona:') • Podaj jakieś wyrażenie pythona: [x*x for x in range(2,5)] • [4,9,16]
OPERACJE NA PLIKACH • Otwieranie • >>> f= open('foo.txt', 'wt',1) # otwiera plik do zapisu • >>> f • <open file 'foo.txt', mode 'wt' at 010C0488> • Tryby otwarcia pliku: • r – do odczytu • w- do zapisu, tworzy nowy plik o podanej nazwie, jeśli taki istniał to niszczy go i tworzy nowy • a – dopisuje na koniec pliku, tworzy nowy jeśli nie istnieje • r+ - do odczytu i zapisu – plik musi istnieć • w+ - tworzy nowy plik do zapisu i odczytu, niszczy stary • a+ - dopisywanie i czytanie, tworzy plik jeśli • nie istnieje
Możemy również dodać: t – tryb tekstowy b – tryb binarny Jeśli plik nie istnieje lub nie masz do niego praw dostępu funkcja open() wyrzuci wyjątek IOError. >>>f= open('foo.txt', 'wt') >>> f.mode() # zwraca tryb otwarcia 'wt' >>> f.closed() # boolean – czy plik zamknięty 0 >>> f.name() # zwraca nazwe pliku 'foo.txt' >>> f.isatty() # czy plik jest przyłączony do terminala 0 >>>f.fileno() # deskryptor pliku 0
tell() - zwraca bieżącą pozycję w pliku • seek(indeks, skad) – zmienia bieżącą pozycję w pliku na pozycję podaną w zmiennej 'indeks'. Argument 'skad' określa jak funkcja ma interpretować pierwszy parametr: • 0- szukaj od początku pliku (domyślnie) • 1- szukaj od bieżącej pozycji w pliku • 2- szukaj od końca
>>>f=open('plik.txt',w+) • >>>f.write('brain') • >>>f.seek(-4,2) • >>>f.read() • 'rain' • >>>f.seek(2) • >>>f.seek(1,1) • >>>f.read() • 'in' • write(str) – zapisuje stringa do pliku be znaku nowej linii • writelines(lista) - j.w tylko w argumencie przyjmuje listę stringów.
>>>f=open('plik.txt',w+) • >>>f.write('python \n') • >>>lines=['jest','fajny!'] • >>>f.writelines(lines) • >>>f.seek(0) • >>>print f.read() • python • jest fajny! • truncate([pozycja]) – usuwa napis od podanej zmiennej, jeśli wywołana bez argumentu to usunie od bieżacej pozycji. • >>>f.seek(5) • >>>f.truncate() • >>>f.seek(0) • >>>print f.read() • pytho
read([liczba]) – czyta okresloną liczbę bajtów z pliku. • readline([liczba]) – czyta linię z pliku.