Sekvensdatatyper, ASCII och chiffer Linda Mannila 1.11.2007
Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering Intro till funktioner och moduler Villkorssatsen if Looparna for och while
Denna föreläsning Mer om sekvensdatatyper Strängar Listor Tupler
Tre sekvensdatatyper Strängar en sträng, en sträng en riktigt, riktigt, riktigt, riktigt rejält lång sträng Listor [1,2,3] [ Januari, Februari, Mars,..., December ] [ [1,2], [2,3], [3,4] ] # Nästlad lista! Tupler (nytt!) (1,2,3) ( Januari, Februari, Mars,..., December )
Tupler Ungefär som listor (ser snart skilnaden) Tom tupel: () Tupel med tre element: (5,2,'hello') Nästlad tupel: (2,5,('hello','polly'),8) Tupel med ett element: (1,) >>> tup = (1,2,3,4) >>> for x in tup: print x*2 >>> 2 >>> 4 >>> 6 >>> 8
Vadå sekvens? Kan indexeras Framifrån (första index 0) Bakifrån (första index -1) >>> my_string = 'Python' >>> my_list = [51, 26, [36,2], 4] >>> my_tuple = (1,5,2,3,6) >>> >>> my_string[1] 'y' >>> my_list[3] 4 >>> my_list[2,1] 2 >>> my_tuple[4] 6 >>> my_string[-1] # Index bakifrån börjar från -1 n
Immutability Strängar och tupler är immutable Oföränderliga Kan inte ändras då de en gång har skapats För ändringar skapa ny sträng/tupel Listor är mutable Föränderliga Kan ändras in-place, dvs. man kan byta ut, ta bort eller lägga till element utan att skapa en ny lista
Uppdateringar >>> my_string = 'Python' >>> my_list = [51, 26, 36, 4] >>> my_tuple = (1,5,2,3,6) >>> my_string[2] = 'q' Traceback (most recent call last): File "<pyshell#14>", line 1, in <module> my_string[2] = 'q' TypeError: 'str' object does not support item assignment >>> my_tuple[1] = 3 Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> my_tuple[1] = 3 TypeError: 'tuple' object does not support item assignment >>> my_list[2] = 4 >>> my_list [51, 26, 4, 4]
Konsekvenser my_string = Python Python my_string my_string = Java Python Java Ny sträng! my_string
Objekt och identitet Allt i Python är objekt med en egen unik identitet >>> a = "banana" >>> b = "banana" >>> id(a) 18975168 >>> id(b) 18975168 >>> a = [1,2,3] >>> b = [1,2,3] >>> id(a) 18990944 >>> id(b) 19001432
Slicing Skär ut en del ur en sekvens skapar en ny sekvens sekvens[ start : stop ] >>> s = "Python" >>> t = (1,2,3) >>> l = [5,2,5,21] >>> s[1:2] # Slice från index 1 upp till 2 (2 inte med) 'y' >>> t[0:2] (1, 2) >>> l[2:4] [5, 21] >>> s[1:] # Bortlämnat index går till änden av sekvensen 'ython' >>> l[:3] # Bortlämnat index går till början av sekvensen [5, 2, 5]
Strängformattering Pythons %-operator formatterar strängar Vänstra sidan: formatsträng som anger hur strängen skall se ut Högra sidan: de värden som skall formatteras Ett värde som det är Fler värden innanför parentes >>> print Jag heter %s % Bo Jag heter Bo >>> print Jag är %d år % 59 Jag är 59 år %s sätt in en sträng här %d sätt in ett heltal här
Strängformattering >>> "Månad: %s År: %d" % ("November", 2007) 'Månad: November År: 2007' >>> "%04d" % 13 # 0 fyll på med nollor '0013 # 4 minst fyra teckens vidd >>> "%6.4f%%" % 37.2 # f flyttal '37.2000% # 6.4 minst sex tecken, 4 decimaler >>> "[%-4d]" % 13 # -4 fyll ut bakifrån med blank- '[13 ] # tecken till fyra teckens vidd
Strängformattering Format Beskrivning Exempel Resultat d Heltal %d %d % (13, 15) 13 15 o Tal i basen 8 %o %o % (13, 15) 15 17 x Tal i basen 16 %x %x % (13, 15) d f X Tal i basen 16 %X %X % (13, 15) D F e Flyttal (exp) %e % 123.45 1.234500e +02 E Flyttal (exp) %E % 123.45 1.234500e +02 f Flyttal %f % 123.45 123.450000 s Sträng %s %s % ( a, b ) A B
Metoder Metod = en funktion som hör ihop med en viss typ av objekt Då allt i Python är objekt Metoder för i princip allt Undantag: tal Mer om att skapa egna objekt och metoder i fortsättningskursen
Strängmetoder >>> s = "" >>> dir(s) [' add ', ' class ', ' contains ', ' delattr ', ' doc ', ' eq ', ' ge ', ' getattribute ', ' getitem ', ' getnewargs ', ' getslice ', ' gt ', ' hash ', ' init ', ' le ', ' len ', ' lt ', ' mod ', ' mul ', ' ne ', ' new ', ' reduce ', ' reduce_ex ', ' repr ', ' rmod ', ' rmul ', ' setattr ', ' str ', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
Strängmetoder (några ex) Metod capitalize lower upper strip lstrip rstrip count find replace Exempel text.capitalize() abcd.lower() abcd.upper() a b.strip() a b.lstrip() a b.rstrip() abracadacra.count( ra ) abracadabra.find( ra ) abracadabra.find( xzy ) abracadabra.replace( ra, - ) Resultat Text abcd ABCD a b a b a b 2 2-1 ab-cadab-
Operationer på listor Konkatenering Fungerar på samma sätt för alla sekvensdatatyper (även för strängar och tupler) [1,2,3] + [4,5,6] [1,2,3,4,5,6] del Raderar ett element/en slice Modifierar samma lista skapar inte en ny >>> min_lista = [1,2,3,4,5,6,7,8] >>> del(min_lista[4]) >>> min_lista [1, 2, 3, 4, 6, 7, 8] >>> del(min_lista[3:5]) >>> min_lista [1, 2, 3, 7, 8]
Listmetoder >>> lista = [] >>> dir(lista) [' add ', ' class ', ' contains ', ' delattr ', ' delitem ', ' delslice ', ' doc ', ' eq ', ' ge ', ' getattribute ', ' getitem ', ' getslice ', ' gt ', ' hash ', ' iadd ', ' imul ', ' init ', ' iter ', ' le ', ' len ', ' lt ', ' mul ', ' ne ', ' new ', ' reduce ', ' reduce_ex ', ' repr ', ' reversed ', ' rmul ', ' setattr ', ' setitem ', ' setslice ', ' str ', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Listmetoder metaller = [ guld, järn, bly, guld ] Metod append count Exempel metaller.append( tenn ) metaller.count( guld ) Resultat [ guld, järn, bly, guld, tenn ] 2 index insert remove metaller.index( järn ) metaller.index( syre ) metaller.insert(2, silver ) metaller.remove( guld ) 1 ValueError: syre not in the list [ guld, järn, silver, bly, guld ] [ järn, bly, guld ] reverse sort metaller.reverse() metaller.sort() [ guld, bly, järn, guld ] [ guld, guld, järn, bly ]
Nästlade listor och tupler Nästlade listor >>> listan = [1,2,[1,2,3],4] >>> listan[1] 2 >>> listan[2] [1, 2, 3] >>> listan[2][0] 1 >>> listan[2][0]="spam!" >>> listan [1, 2, ['SPAM!', 2, 3], 4] Tupler är immutable, dvs. kan inte ändras, men dess element kan vara mutable (t.ex. en lista): >>> tup = (1,2,[1,2,3],3) >>> tup[2] [1, 2, 3] >>> tup[2][1] = "SPAM! # Uppdaterar listan, inte själva tupeln >>> tup (1, 2, [1, 'SPAM!', 3], 3)