004 - programando em python - - programando em python - listas.pdf · numa lista é na verdade um...

Download 004 - Programando em Python - - Programando em Python - Listas.pdf · nUma lista é na verdade um objetode…

Post on 06-Nov-2018

213 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Claudio Esperana

    Python:Listas

  • Estruturas de dadosn Maneira de organizar dados de maneira a facilitar seu acesson Algumas formas so clssicas:

    n Listasn Arrays (vetores e matrizes)n Tuplas (registros)n rvores

    n Linguagens frequentemente possuem primitivas para construo dessas E.D. n Estruturas de dados embutidas

    n Outras E.D. mais complexas podem ser construdas combinando as E.D. clssicas

  • Estrutura de dados abstratan uma especificao matemtica que define uma coleo de

    dados e uma srie de operaes sobre elan abstrata porque no especifica como as operaes so feitas

    mas somente os dados de entrada e o resultadon Numa linguagem de programao, essa coleo de operaes

    chamada de interface ou API (Application Programming Interface)

    n Usurios da e.d.a devem se preocupar com a interface e no com a implementao, que pode mudar com o tempo

    n A implementao de uma e.d.a. requer cuidados quanto correo e a eficincia da mesma

  • Listasn So arranjos sequenciais de informaes mais simplesn Caracterizam-se por permitir o acesso eficiente aos seus elementos

    em ordem sequencialn A definio clssica de uma lista como estrutura de dados abstrata

    compreende:n Operao de construo de uma lista vazian Operao que testa se uma dada lista vazian Operao para obter o primeiro elemento de uma listan Uma operao para adicionar um novo elemento no incio de

    uma listan Operao para retirar o elemento inicial de uma lista

  • Listas em Pythonn A estrutura conhecida como lista (list, em ingls) em

    Python bastante mais geral do que e.d.a. lista clssican Na verdade, pode ser vista como uma implementao

    tanto de listas como de arraysn Alm de acesso sequencial, suportam tambm acesso direto

    atravs de ndicesn Listas so variedades de sequncias assim como strings e

    portanto tm APIs semelhantesn Podem ser indexadas e fatiadasn Podem ser concatenadas (+) e repetidas

  • Listas em Pythonn Entretanto, h diferenas importantes entre listas e strings

    n Seqncia genrica X de sequncia de caracteresn Elementos de listas podem ser alterados individualmente

    mas os de strings, non Listas constituem o tipo de agregao de dados mais

    verstil e comum da linguagem Pythonn Podem ser usadas para implementar estruturas de dados

    mais complexas como matrizes e rvores, por exemplo

  • Listas: constantes e ndicesn Uma constante do tipo lista escrita entre colchetes com

    os elementos separados por vrgula:[] # lista vazia[1,2] # lista com 2 elementos

    n Os elementos de uma lista podem ser de qualquer tipo, inclusive listas. Ex.:lista = [1, 'a', 2+3j, ['ab', 'CD']]

    n Os elementos de uma lista podem ser acessados por ndices como stringsn O primeiro elemento tem ndice 0n O ltimo elemento tem ndice -1

  • Listas: constantes e ndices>>> lista = [1, 'a', 2+3j, ['ab', 'CD']]>>> lista [0]1>>> lista [2](2+3j)>>> lista [3]['ab', 'CD']>>> lista [-1]['ab', 'CD']>>> lista [0] = 2>>> lista[2, 'a', (2+3j), ['ab', 'CD']]

  • Listas: Concatenao e Repetion O operador + pode ser usado para concatenao e o

    operador * para repetio>>> lista = [0]*4>>> lista[0, 0, 0, 0]>>> lista = lista + [1]*3>>> lista[0, 0, 0, 0, 1, 1, 1]

  • Deletando elementosn O operador del pode ser usado para remover elementos

    de uma listan Ex.:

    >>> lista[1, 2, 3, ['ab', 'CD']]>>> del lista [2]>>> lista[1, 2, ['ab', 'CD']]>>> del lista [2][1]>>> lista[1, 2, ['ab']]

  • Listas: fatias (slices)n A notao de fatias tambm pode ser usada, inclusive para

    atribuio:>>> lista = [1, 'a', 2+3j, ['ab', 'CD']]

    >>> lista [1:]

    ['a', (2+3j), ['ab', 'CD']]

    >>> lista [:1]

    [1]

    >>> lista [1:2]

    ['a']

    >>> lista [0:-1]

    [1, 'a', (2+3j)]

  • Listas: atribuio a fatiasn A atribuio a uma fatia requer que o valor atribudo seja uma sequncia (uma

    lista ou uma string, por exemplo)

    n A atribuio substitui os elementos da fatia pelos da sequncia

    >>> lista = [1, 'y', ['ab', 'CD']]>>> lista [1:1] = ['z']>>> lista[1, 'z', 'y', ['ab', 'CD']]>>> lista [1:3] = [['x']]>>> lista[1, ['x'], ['ab', 'CD']]>>> lista [1:-1]= [2,3,4]>>> lista[1, 2, 3, 4, ['ab', 'CD']]>>> lista [:2] = 'xyz'>>> lista['x', 'y', 'z', 3, 4, ['ab', 'CD']]

  • Incrementos em Fatiasn possvel usar um terceiro nmero na notao de fatias

    designando o incremento

    n Default 1 , ou seja, toma os elementos de um em um do menor para o maior ndice

    n Pode-se usar qualquer nmero inteiro diferente de 0n a[0:10:2] retorna uma lista com os 10 primeiros elementos de a

    tomados de 2 em 2 (5 elementos, no mximo)

    n a[5:0:-1] retorna uma lista com os 5 primeiros elementos de a tomados da esquerda para a direita

    n Obs.: Esta notao s existe nas verses de Python a partir da 2.3

  • Incrementos em Fatiasn Exemplo

    >>> a = ['a', 2, 3, 'd', 'x']>>> a [:3:2]['a', 3]>>> a [::-1]['x', 'd', 3, 2, 'a']

  • Incrementos em Fatiasn Se um incremento de fatia diferente de 1, uma

    atribuio fatia deve ter o mesmo nmero de elementos:>>> l = [1,2,3,4,5]>>> l [0::2] = ['x','y','z']>>> l['x', 2, 'y', 4, 'z']>>> l [0::2] = [6,7]

    Traceback (most recent call last):File "", line 1, in -toplevel-l [0::2] = [6,7]

    ValueError: attempt to assign sequence of size 2 to extended slice of size 3

  • Operador inn Permite saber se um elemento pertence a uma listan Serve tambm para stringsn Ex.:

    >>> lista = [1, 'a', 'bc']>>> 1 in listaTrue>>> 2 in listaFalse>>> 'b' in listaFalse>>> 'b' in lista[2]True>>> 'bc' in 'abcd'True

  • Inicializando listasn No possvel atribuir a uma posio inexistente de uma

    lista>>> vetor = []>>> vetor [0] = 1Traceback (most recent call last):File "", line 1, in -toplevel-vetor [0] = 1

    IndexError: list assignment index out of rangen Se uma lista vai ser usada como um array, isto , vai conter

    um nmero predeterminado de elementos, conveniente inici-la

    >>> vetor = [0]*10>>> vetor [0] = 3>>> vetor[3, 0, 0, 0, 0, 0, 0, 0, 0, 0]

  • Usando Nonen No uso de estruturas de dados, s vezes importante

    preencher uma posio com um valor no vlidon A melhor opo para esse uso empregar o valor especial

    Nonen No faz parte de tipo nenhum

    n melhor que usar 0, [] ou uma string vazia

    n til para criar uma lista vazia mas com um nmero conhecido de posies. Ex.:>>> lista = [None]*5>>> lista[None, None, None, None, None]

  • Len, min e maxn len (lista) retorna o nmero de elementos de listan min (lista) e max (lista) retornam o menor/maior elemento de

    listan Ex.:

    >>> lista = [1, 2, 9, 3, 4]>>> min (lista)1>>> len (lista)5>>> max (lista)9>>> max (['a', 'b', 'c'])'c'

  • min e maxn Na verdade, min e max podem ser usados tambm com vrios

    argumentos ao invs de uma listan Ex.:

    >>> min (1,2,3,4)1>>> max (3,4,5)5>>> max ([],[1],['a'])['a']

  • A funo listn Pode ser usada para converter uma string numa lista

    n til pois uma lista pode ser modificada, mas uma string, no

    n Para fazer a transformao inversa, pode-se usar o mtodo join (veremos mtodos mais tarde)

    n Ex.:n >>> lista = list('alo')n >>> listan ['a', 'l', 'o']n >>> lista[1]='xx'n >>> listan ['a', 'xx', 'o']n >>> ''.join(lista)n 'axxo'

  • A funo rangen Gera uma progresso aritmtica de inteiros, que pode ser colocada em uma listan Forma geral: range (incio, parada, incremento)

    n incio (opcional) o primeiro valor a ser gerado (default: 0)n parada o limite da progresso: a progresso termina no ltimo valor antes

    de paradan incremento (opcional) o passo da progresso (default:1)

    n Ex.:>>> list(range(3))[0, 1, 2]>>> list(range(2,5,2))[2, 4]>>> list(range(5,2,-2))[5, 3]

  • Comando forn Permite iterar sobre os elementos de uma lista, ou uma

    sequncia de inteiros

    n Forma geral: for var in lista : comandosn Os comandos so repetidos para cada valor de listan Durante a repetio, var possui o valor corrente da lista

    n Uma grande utilidade da funo range construir a lista

    de iterao

    n Ex.:

    >>>for i in range(1,7): print (i, end= )

    1 2 3 4 5 6

  • Comparando listasn Listas so comparadas lexicograficamente

    n Se duas listas so iguais at os k-simos elementos, o resultado da comparao depende da comparao entre os (k+1)-simos elementos

    n Se alguma das listas tem somente k elementos, ento esta a menor

    n Duas listas so iguais se e somente se tm o mesmo comprimento e todos os elementos de mesma posio so iguais

    n Uma lista maior que um nmero mas menor que uma stringn No me pergunte por qu!

  • Comparando listas>>> [1,2] < [2, 3]True>>> [1,2] < [1, 2, 3]True>>> [1,2] != [1,2]False>>> min([[1],[2,3],[3,4],[]])[]>>> max([[1],[2,3],[3,4],[]])[3, 4]>>> min(0,[],"")0>>> max(0,[],"")''

  • Variveis do tipo listn Uma varivel do tipo lista na verdade contm uma

    referncia para um valor do tipo listan Atribuir uma varivel a outra, cria uma nova referncia mas

    no uma nova listan Para se criar um novo valor, pode-se u