computação 1 - python aula 6 - teórica...

34
Computa¸ ao 1 - Python Aula 6 - Te´ orica Listas Jo˜ ao Carlos, Carla Delgado, Ana Luisa Duboc 1/ 32

Upload: dinhkhanh

Post on 25-Sep-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Computacao 1 - Python

Aula 6 - Teorica

Listas

Joao Carlos, Carla Delgado, Ana Luisa Duboc

1/ 32

Listas - Fatias

Podemos usar a notacao de fatias (slices) em listas:

[start : end] : vai do ındice start ate o ındice end

[start : ] : vai de start ate o final da lista

[ : end] : vai do inıcio da lista ate end

[ : ] : copia a lista toda

1 >>> c = [−45 ,6 ,3 ,0 ,1 ,19 ,32 ,−23 ,12 ,5 ,−3 ,8 ,2]23 >>> c [−1:−5:1]456 >>> c [−5:−1:1]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

2/ 32

Listas - Fatias

Podemos usar a notacao de fatias (slices) em listas:

[start : end] : vai do ındice start ate o ındice end

[start : ] : vai de start ate o final da lista

[ : end] : vai do inıcio da lista ate end

[ : ] : copia a lista toda

1 >>> c = [−45 ,6 ,3 ,0 ,1 ,19 ,32 ,−23 ,12 ,5 ,−3 ,8 ,2]23 >>> c [−1:−5:1]4 [ ]56 >>> c [−5:−1:1]7 [12 , 5 , −3, 8 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

3/ 32

Listas - Fatias

Podemos usar a notacao de fatias (slices) em listas:

[start : end] : vai do ındice start ate o ındice end

[start : ] : vai de start ate o final da lista

[ : end] : vai do inıcio da lista ate end

[ : ] : copia a lista toda

Exemplo

1 >>> l i s t a = [ ’ a ’ , 2 , [ 3 , ’ f ’ ] , ’ q ’ ]23 >>> l i s t a [ 1 : ]456 >>> l i s t a [ : 1 ]789 >>> l i s t a [ 1 : 2 ]

101112 >>> l i s t a [0:−1]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

4/ 32

Listas - Fatias

Podemos usar a notacao de fatias (slices) em listas:

[start : end] : vai do ındice start ate o ındice end

[start : ] : vai de start ate o final da lista

[ : end] : vai do inıcio da lista ate end

[ : ] : copia a lista toda

Exemplo

1 >>> l i s t a = [ ’ a ’ , 2 , [ 3 , ’ f ’ ] , ’ q ’ ]23 >>> l i s t a [ 1 : ]4 [ 2 , [ 3 , ’ f ’ ] , ’ q ’ ]56 >>> l i s t a [ : 1 ]7 [ ’ a ’ ]89 >>> l i s t a [ 1 : 2 ]

10 [ 2 ]1112 >>> l i s t a [0:−1]13 [ ’ a ’ , 2 , [ 3 , ’ f ’ ] ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

5/ 32

Listas - Fatias

Incremento: podemos usar incremento / decremento paraselecionar os elementos de uma fatia:

[start : end : step] : vai do ındice start ate end (sem ultrapassa-lo), compasso step.

Exemplo

1 >>> l i s t a = [ 1 , 2 , 3 , 4 , 5 , 6 ]23 >>> l i s t a [0 : −1 : 2 ]456 >>> l i s t a [5 : 0 : −1 ]789 >>> l i s t a [0 : −1 : 3 ]

101112 >>> l i s t a [ : : −1 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

6/ 32

Listas - Fatias

Incremento: podemos usar incremento / decremento paraselecionar os elementos de uma fatia:

[start : end : step] : vai do ındice start ate end (sem ultrapassa-lo), compasso step.

Exemplo

1 >>> l i s t a = [ 1 , 2 , 3 , 4 , 5 , 6 ]23 >>> l i s t a [0 : −1 : 2 ] # I n d i c e 0 at e o i n d i c e −2 de 2 em 24 [ 1 , 3 , 5 ]56 >>> l i s t a [5 : 0 : −1 ] # I n d i c e 5 at e o i n d i c e 1 de 1 em 17 [ 6 , 5 , 4 , 3 , 2 ]89 >>> l i s t a [0 : −1 : 3 ] # I n d i c e 0 at e o i n d i c e −2 de 3 em 3

10 [ 1 , 4 ]1112 >>> l i s t a [ : : −1 ] # I n v e r t e a l i s t a13 [ 6 , 5 , 4 , 3 , 2 , 1 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

7/ 32

Listas - Fatias

Atribuicao: ao atribuir uma sequencia a uma fatia, os elementosdesta devem ser substituıdos pelos elementos daquela.

1 >>> l i s t a = [ 1 , 2 , 3 , 4 , 5 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

8/ 32

Listas - Fatias

Atribuicao: ao atribuir uma sequencia a uma fatia, os elementosdesta devem ser substituıdos pelos elementos daquela.

1 >>> l i s t a = [ 1 , 2 , 3 , 4 , 5 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

9/ 32

Listas - Fatias

Atribuicao: ao atribuir uma sequencia a uma fatia, os elementosdesta devem ser substituıdos pelos elementos daquela.

1 >>> l i s t a = [ 1 , 2 , 3 , 4 , 5 ]2

3 >>> n o v a l i s t a = [ 8 , 1 0 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

10/ 32

Listas - Fatias

1 >>> l i s t a = [ 1 , 2 , 3 , 4 , 5 ]2 >>> l i s t a [ 1 : 1 ] = [ ’ z ’ ]3

4

5 >>> l i s t a [ 1 : 3 ] = [ [ 7 ] ]6

7

8 >>> l i s t a [1 : −1] = [ 8 , 9 , 1 0 ]9

10

11 >>> l i s t a [ : 3 ] = ” xyz ”12

13

14 >>> l i s t a [ : 3 ] = ”a , b , c ”15

16

17 >>> l i s t a [ : 2 ] = 1 ,2 ,3

Observe que a lista vai sendo alterada

Joao Carlos, Carla Delgado, Ana Luisa Duboc

11/ 32

Listas - Fatias

1 >>> l i s t a = [ 1 , 2 , 3 , 4 , 5 ]2 >>> l i s t a [ 1 : 1 ] = [ ’ z ’ ]3 [ 1 , ’ z ’ , 2 , 3 , 4 , 5 ]4

5 >>> l i s t a [ 1 : 3 ] = [ [ 7 ] ]6 [ 1 , [ 7 ] , 3 , 4 , 5 ]7

8 >>> l i s t a [1 : −1] = [ 8 , 9 , 1 0 ]9 [ 1 , 8 , 9 , 10 , 5 ]

10

11 >>> l i s t a [ : 3 ] = ” xyz ”12 [ ’ x ’ , ’ y ’ , ’ z ’ , 10 , 5 ]13

14 >>> l i s t a [ : 3 ] = ”a , b , c ”15 [ ’ a ’ , ’ , ’ , ’ b ’ , ’ , ’ , ’ c ’ , 10 , 5 ]16

17 >>> l i s t a [ : 2 ] = 1 ,2 ,318 [ 1 , 2 , 3 , ’ b ’ , ’ , ’ , ’ c ’ , 10 , 5 ]

Observe que a lista vai sendo alterada

Joao Carlos, Carla Delgado, Ana Luisa Duboc

12/ 32

Alias e Tipos Mutaveis

Relembrando - um alias acontece quando duas variaves se referem ao mesmo dado:

1 >>> y = [ 1 , 2 , 3 ]2 >>> x = y3 >>> x4 [ 1 , 2 , 3 ]5 >>> y6 [ 1 , 2 , 3 ]

Qualquer nova atribuicao feita a uma das variaveis quebrara o alias entre elas.

1 >>> x = [ 4 , 5 , 6 ]2 >>> x3 [ 4 , 5 , 6 ]4 >>> y5 [ 1 , 2 , 3 ]

Porem quando o dado e mutavel (lista!!), o alias nao e quebrado caso uma atribuicao modifique uma parte do dado:

1 >>> y = [ 1 , 2 , 3 ]2 >>> x = y3 >>> x [1 ]=1 . 54 >>> x5 [ 1 , 1 . 5 , 3 ]6 >>> y7 [ 1 , 1 . 5 , 3 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

13/ 32

Listas - Copias

Cuidado quando fizer copia de listas!

1 >>> l 1 = [ 1 , 2 , 3 , 4 , 5 ]2 >>> l 2 = l 13 >>> l 14 [ 1 , 2 , 3 , 4 , 5 ]5

6 >>> l 27 [ 1 , 2 , 3 , 4 , 5 ]8

9 >>> l 2 [0]=910 >>> l 211 [ 9 , 2 , 3 , 4 , 5 ]12

13 >>> l 114 [ 9 , 2 , 3 , 4 , 5 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

14/ 32

Listas - Copias

Cuidado quando fizer copia de listas!

1 >>> l 1 = [ 1 , 2 , 3 , 4 , 5 ]2 >>> l 2 = l 1 [ : ]3 >>> l 14 [ 1 , 2 , 3 , 4 , 5 ]5

6 >>> l 27 [ 1 , 2 , 3 , 4 , 5 ]8

9 >>> l 2 [0]=910 >>> l 211 [ 9 , 2 , 3 , 4 , 5 ]12

13 >>> l 114 [ 1 , 2 , 3 , 4 , 5 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

15/ 32

Manipulacao de Listas

Alem dos operadores + (concatenacao) e * (usado para multiplasconcatenacoes) podemos manipular listas usando:

append : outra forma de concatenacao. Neste caso, a lista etratada como uma fila.

extend : permite adicionar os elementos de uma lista a outra.

del : remover elemento de uma lista.

Joao Carlos, Carla Delgado, Ana Luisa Duboc

16/ 32

Manipulacao de Listas

1 >>> l i s t a =[]2 >>> l i s t . append ( l i s t a , ’ a ’ )3 >>> l i s t a4 [ ’ a ’ ]5

6 >>> l i s t . append ( l i s t a , 2 )7 >>> l i s t a8 [ ’ a ’ , 2 ]9

10 >>> l i s t . append ( l i s t a , [ 3 , ’ f ’ ] )11 >>> l i s t a12 [ ’ a ’ , 2 , [ 3 , ’ f ’ ] ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

17/ 32

Manipulacao de Listas

1 >>> l i s t a2 [ ’ a ’ , 2 , [ 3 , ’ f ’ ] ]34 >>> l i s t . extend ( l i s t a , [ ’ q ’ ] )5 >>> l i s t a6 [ ’ a ’ , 2 , [ 3 , ’ f ’ ] , ’ q ’ ]78 >>> l i s t . extend ( l i s t a , [ 3 , 7 ] )9 >>> l i s t a

10 [ ’ a ’ , 2 , [ 3 , ’ f ’ ] , ’ q ’ , 3 , 7 ]1112 >>> l i s t . extend ( l i s t a , 1 0 )13 Traceback (most r e c e n t c a l l l a s t ) :14 F i l e ”<p y s h e l l#11>” , l i n e 1 , i n <module>15 l i s t . extend ( l i s t a , 1 0 )16 TypeError : ’ i n t ’ o b j e c t i s not i t e r a b l e1718 >>> l i s t . extend ( l i s t a , ” bo l a ” )19 >>> l i s t a20 [ ’ a ’ , 2 , [ 3 , ’ f ’ ] , ’ q ’ , 3 , 7 , ’ b ’ , ’ o ’ , ’ l ’ , ’ a ’ ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

18/ 32

Manipulacao de Listas

1 >>> l i s t a2 [ ’ a ’ , 2 , [ 3 , ’ f ’ ] , ’ q ’ , 3 , 7 , ’ b ’ , ’ o ’ , ’ l ’ , ’ a ’ ]34 >>> d e l l i s t a [ 1 ]5 >>> l i s t a6 [ ’ a ’ , [ 3 , ’ f ’ ] , ’ q ’ , 3 , 7 , ’ b ’ , ’ o ’ , ’ l ’ , ’ a ’ ]78 >>> d e l l i s t a [ 7 ]9 >>> l i s t a

10 [ ’ a ’ , [ 3 , ’ f ’ ] , ’ q ’ , 3 , 7 , ’ b ’ , ’ o ’ , ’ a ’ ]11 # Como o segundo e l emento de l i s t a e uma l i s t a ,12 # posso r e t i r a r de s t a seu segundo e l emento1314 >>> d e l l i s t a [ 1 ] [ 1 ]15 >>> l i s t a16 [ ’ a ’ , [ 3 ] , ’ q ’ , 3 , 7 , ’ b ’ , ’ o ’ , ’ a ’ ]1718 >>> d e l l i s t a [ 2 ] [ 1 ]19 Traceback (most r e c e n t c a l l l a s t ) :20 F i l e ”<p y s h e l l#20>” , l i n e 1 , i n <module>21 d e l l i s t a [ 2 ] [ 1 ]22 TypeError : ’ s t r ’ o b j e c t doesn ’ t suppor t i tem d e l e t i o n

Joao Carlos, Carla Delgado, Ana Luisa Duboc

19/ 32

Manipulacao de Listas

list.insert(lista,ındice, elemento): insere elemento na lista na posicao indicadapor ındice.

1 >>> l i s t a = [ 0 , 1 , 2 , 3 ]23 >>> l i s t . i n s e r t ( l i s t a , 1 , ’ d o i s ’ )45 >>> l i s t a6 [ 0 , ’ d o i s ’ , 1 , 2 , 3 ]

Como o extend, altera a lista ao inves de retornar a lista. O valor retornado eNone!

Atribuicoes a fatias servem para a mesma finalidade mas sao menos legıveis.

1 >>> l i s t a = [ 0 , 1 , 2 , 3 ]23 >>> l i s t a [ 1 : 1 ] = [ ’ d o i s ’ ]45 >>> l i s t a6 [ 0 , ’ d o i s ’ , 1 , 2 , 3 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

20/ 32

Manipulacao de Listas

list.remove(lista, elemento): Remove da lista o primeiro elemento iguala elemento. Se nao existe tal elemento, um erro e gerado.

1 >>> l i s t a = [ ’ o i ’ , ’ a l o ’ , ’ o l a ’ ]2

3 >>> l i s t . remove ( l i s t a , ’ a l o ’ )4

5 >>> l i s t a6 [ ’ o i ’ , ’ o l a ’ ]7

8 >>> l i s t . remove ( l i s t a , ’ oba ’ )9

10 Traceback ( most r e c en t c a l l l a s t ) :11 F i l e ”<p y s h e l l#116>” , l i n e 1 , i n <module>12 l i s t . remove ( l i s t a , ”oba” )13 Va l u eE r r o r : l i s t . remove ( x ) : x not i n l i s t

Joao Carlos, Carla Delgado, Ana Luisa Duboc

21/ 32

Manipulacao de Listas

list.remove(lista, elemento): Remove da lista o primeiro elemento iguala elemento. Se nao existe tal elemento, um erro e gerado.

1 >>> l i s t a = [1 , 3 , 6 , 7 , 1 , 5 , 1 ]2 >>> l i s t . remove ( l i s t a , 1 ) # Remove apenas a p r im e i r a3 # oco r r e n c i a do e lemento !4 >>> l i s t a5 [ 3 , 6 , 7 , 1 , 5 , 1 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

22/ 32

Manipulacao de Listas

Observe a diferenca entre del e remove:

Suponha lista = [4,6,7,1,2], e digamos que quero deletar o elemento 1.

Para o del e preciso indicar o ındice do elemento da lista quese deseja deletar: del lista[3]

Enquanto que para o remove basta indicar o elemento a serdeletado: list.remove(lista, 1)

Joao Carlos, Carla Delgado, Ana Luisa Duboc

23/ 32

Manipulacao de Listas

list.pop(lista, ındice): Remove da lista o elemento na posicao ındice e oretorna. Se ındice nao for mencionado, e assumido o ultimo.

1 >>> l i s t a = [ 1 , 2 , 3 , 4 ]2 >>> l i s t . pop ( l i s t a )3 445 >>> l i s t a6 [ 1 , 2 , 3 ]78 >>> d e l e t a do = l i s t . pop ( l i s t a , 1 )9 >>> d e l e t a do

10 21112 >>> l i s t a13 [ 1 , 3 ]

A diferenca entre del e pop e que este retorna o elemento deletado,enquanto o del nao.

Joao Carlos, Carla Delgado, Ana Luisa Duboc

24/ 32

Manipulacao de Listas

list.count(lista, elemento): Retorna quantas vezes o elemento aparecena lista.

1 >>> l i s t a = [9 , 8 , 33 , 12 , 33 ]2 >>> l i s t . count ( l i s t a , 3 3 )3 2

list.index(elemento): Retorna o ındice da primeira ocorrencia deelemento na lista. Um erro ocorre se elemento nao consta da lista.

1 >>> l i s t . i nd e x ( l i s t a , 33)2 23 >>> l i s t . i nd e x ( l i s t a , 7 )4 Traceback (most r e c e n t c a l l l a s t ) :5 F i l e ”<p y s h e l l#110>” , l i n e 1 , i n <module>6 l i s t a . i nd ex (7)7 Va l u eE r r o r : 7 i s not i n l i s t

Joao Carlos, Carla Delgado, Ana Luisa Duboc

25/ 32

Manipulacao de Listas

OBSERVACAO: Usar o index para saber se o elemento estanuma lista nao e uma boa ideia, porque se nao estiver, daraerro.

Uma forma de saber se um elemento esta numa lista e usar oin, conforme exemplificado abaixo:

1 >>> l i s t a = [ 1 , 4 , 8 , 3 , 2 ]2 >>> 2 i n l i s t a3 True4

5 >>> 10 i n l i s t a6 Fa l s e

Joao Carlos, Carla Delgado, Ana Luisa Duboc

26/ 32

Manipulacao de Listas

Faca uma funcao que dada uma lista e um elemento, retorna em que posicao da listaaquele elemento se encontra. Se o elemento nao estiver na lista, retorne umamensagem. Obs: Garanta que nao havera erro.

Joao Carlos, Carla Delgado, Ana Luisa Duboc

27/ 32

Manipulacao de Listas

Faca uma funcao que dada uma lista e um elemento, retorna em que posicao da listaaquele elemento se encontra. Se o elemento nao estiver na lista, retorne umamensagem. Obs: Garanta que nao havera erro.

1 de f p rocu ra ( l i s t a , e l emento ) :2 ”Funcao que p rocu ra um e lemento em uma l i s t a , e r e t o r n a3 a po s i c a o em que e l e e s t a ou uma mensagem de e r r o4 caso o e l emento nao e s t e j a na l i s t a5 Parametro de Entrada : l i s t , any t ype6 Va l o r de Retorno : i n t / s t r ”78 i f e l emento i n l i s t a :9 r e t u r n l i s t . i nde x ( l i s t a , e l emento )

10 e l s e :11 r e t u r n ’Nao e s t a na l i s t a ’

Joao Carlos, Carla Delgado, Ana Luisa Duboc

27/ 32

Manipulacao de Listas

Faca uma funcao que dada uma lista e um elemento, retorna em que posicao da listaaquele elemento se encontra. Se o elemento nao estiver na lista, retorne umamensagem. Obs: Garanta que nao havera erro.

1 de f p rocu ra ( l i s t a , e l emento ) :2 ”Funcao que p rocu ra um e lemento em uma l i s t a , e r e t o r n a3 a po s i c a o em que e l e e s t a ou uma mensagem de e r r o4 caso o e l emento nao e s t e j a na l i s t a5 Parametro de Entrada : l i s t , any t ype6 Va l o r de Retorno : i n t / s t r ”78 i f e l emento i n l i s t a :9 r e t u r n l i s t . i nde x ( l i s t a , e l emento )

10 e l s e :11 r e t u r n ’Nao e s t a na l i s t a ’

1 >>> po s i c a o = procura ( [ 1 , 4 , 8 , 3 , 2 ] , 2 )2 >>> po s i c a o3 44 >>> po s i c a o = procura ( [ 1 , 4 , 8 , 3 , 2 ] , 7 )5 >>> po s i c a o6 ’Nao e s t a na l i s t a ’

Joao Carlos, Carla Delgado, Ana Luisa Duboc

27/ 32

Manipulacao de Listas

list.reverse(lista): inverte a ordem dos elementos da lista.

1 >>> l i s t a =[1 , 2 , 3 ]2 >>> l i s t . r e v e r s e ( l i s t a )3 >>> l i s t a4 [ 3 , 2 , 1 ]

list.sort(lista): ordena uma lista.

1 >>> l i s t a =[2 , 1 , 3 ]2 >>> l i s t . s o r t ( l i s t a )3 >>> l i s t a4 [ 1 , 2 , 3 ]

Joao Carlos, Carla Delgado, Ana Luisa Duboc

28/ 32

Manipulacao de Listas

ATENCAO

Algumas funcoes que manipulam listas nao possuem valor deretorno:

list.appendlist.extendlist.insertlist.removelist.reverselist.sort

Enquanto outras possuem:

list.poplist.countlist.index

Joao Carlos, Carla Delgado, Ana Luisa Duboc

29/ 32

Manipulacao de Listas

Considere a funcao alteraLista abaixo:1 de f a l t e r a L i s t a ( l i s t a ) :2 ”Parametro de Entrada : l i s t3 Va l o r de Retorno : l i s t ”45 l i s t . append ( l i s t a , 1 0 )6 l i s t . append ( l i s t a , [ 3 , ’ bo l a ’ ] )7 l i s t . append ( l i s t a , ’ l ua ’ )8 l i s t . extend ( l i s t a , [ 1 , 2 , 3 ] )9 l i s t . extend ( l i s t a , ’ l ua ’ )

10 d e l l i s t a [ 2 ]11 l i s t . i n s e r t ( l i s t a , 2 , 1 )12 l i s t . remove ( l i s t a , 2 )13 e l emento = l i s t . pop ( l i s t a , 3 )14 l i s t . i n s e r t ( l i s t a , 1 , e l emento )15 r e t u r n l i s t a

Qual sera a saıda da funcao se a chamada for alteraLista([4,5])

Joao Carlos, Carla Delgado, Ana Luisa Duboc

30/ 32

Autores

Joao C. P. da Silva Lattes

Carla Delgado Lattes

Ana Luisa Duboc Lattes

Colaboradores

Fabio Mascarenhas Lattes

Anamaria Martins Moreira Lattes

Leonardo de Oliveira Carvalho Lattes

Charles Figueiredo de Barros Lattes

Fabrıcio Firmino de Faria Lattes

Joao Carlos, Carla Delgado, Ana Luisa Duboc

31/ 32

Computacao 1 - Python

Aula 6 - Teorica

Listas

Joao Carlos, Carla Delgado, Ana Luisa Duboc

32/ 32