Você está na página 1de 43

Python:

Listas

Claudio Esperana

Estruturas de dados
Maneiradeorganizardadosdemaneiraafacilitarseuacesso
Algumasformassoclssicas:

Listas

Arrays(vetoresematrizes)

Tuplas(registros)

rvores

Linguagensfreqentementepossuemprimitivaspara

construodessasE.D.

Estruturasdedadosembutidas

OutrasE.D.maiscomplexaspodemserconstrudas

combinandoasE.D.clssicas

Estrutura de dados abstrata


umaespecificaomatemticaquedefineumacoleo

dedadoseumasriedeoperaessobreela
abstrataporquenoespecificacomoasoperaesso

feitasmassomenteosdadosdeentradaeoresultado
Numalinguagemdeprogramao,essacoleode

operaeschamadadeinterfaceouAPI(Application
ProgrammingInterface)
Usuriosdae.d.adevemsepreocuparcomainterfacee

nocomaimplementao,quepodemudarcomotempo
Aimplementaodeumae.d.a.requercuidadosquanto

correoeaeficinciadamesma

Listas
Soarranjosseqenciaisdeinformaesmaissimples
Caracterizamseporpermitiroacessoeficienteaosseus

elementosemordemseqencial
Adefinioclssicadeumalistacomoestruturadedados

abstratacompreende:

Operaodeconstruodeumalistavazia

Operaoquetestaseumadadalistavazia

Operaoparaobteroprimeiroelementodeumalista

Umaoperaoparaadicionarumnovoelementonoincio
deumalista

Operaopararetiraroelementoinicialdeumalista

Listas em Python
Aestruturaconhecidacomolista(list,emingls)em

Pythonbastantemaisgeraldoquee.d.a.lista
clssica
Naverdade,podeservistacomoumaimplementao
tantodelistascomodearrays

Almdeacessoseqencial,suportamtambmacesso
diretoatravsdendices

Listassovariedadesdeseqnciasassimcomo

stringseportantotmAPIssemelhantes

Podemserindexadasefatiadas
Podemserconcatenadas(+)erepetidas

Listas em Python
Entretanto,hdiferenasimportantesentrelistase

strings

SeqnciagenricaXdeseqnciadecaracteres

Elementosdelistaspodemseralterados
individualmentemasosdestrings,no

Listasconstituemotipodeagregaodedadosmais

verstilecomumdalinguagemPython

Podemserusadasparaimplementarestruturasde
dadosmaiscomplexascomomatrizeservores,por
exemplo

Listas: constantes e ndices


Umaconstantedotipolistaescritaentrecolchetes

comoselementosseparadosporvrgula:
[] # lista vazia
[1,2] # lista com 2 elementos
Oselementosdeumalistapodemserdequalquer

tipo,inclusivelistas.Ex.:
lista = [1, 'a', 2+3j, ['ab', 'CD']]
Oselementosdeumalistapodemseracessadospor

ndicescomostrings

Oprimeiroelementotemndice0

Oltimoelementotemndice1

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 Repetio


Ooperador+podeserusadoparaconcatenaoeo

operador*pararepetio
>>>
>>>
[0,
>>>
>>>
[0,

lista
lista
0, 0,
lista
lista
0, 0,

= [0]*4
0]
= lista + [1]*3
0, 1, 1, 1]

Deletando elementos
Ooperadordelpodeserusadopararemover

elementosdeumalista
Ex.:

>>>
[1,
>>>
>>>
[1,
>>>
>>>
[1,

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

Listas: fatias (slices)


Anotaodefatiastambmpodeserusada,inclusive

paraatribuio:
>>> 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 fatias


Aatribuioaumafatiarequerqueovaloratribudosejaumaseqncia

(umalistaouumastring,porexemplo)
Aatribuiosubstituioselementosdafatiapelosdaseqncia
>>> 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 Fatias
possvelusarumterceironmeronanotaode

fatiasdesignandooincremento

Default1,ouseja,tomaoselementosdeumemum
domenorparaomaiorndice

Podeseusarqualquernmerointeirodiferentede0

a[0:10:2]retornaumalistacomos10primeiroselementos
deatomadosde2em2(5elementos,nomximo)

a[5:0:-1]retornaumalistacomos5primeiroselementos
dea tomadosdaesquerdaparaadireita

Obs.:EstanotaosexistenasversesdePythona

partirda2.3

Incrementos em Fatias
Exemplo

>>> a
>>> a
['a',
>>> a
['x',

= ['a', 2, 3, 'd', 'x']


[:3:2]
3]
[::-1]
'd', 3, 2, 'a']

Incrementos em Fatias
Seumincrementodefatiadiferentede1,uma

atribuiofatiadeveteromesmonmerode
elementos:
>>> l
>>> l
>>> l
['x',
>>> l

= [1,2,3,4,5]
[0::2] = ['x','y','z']
2, 'y', 4, 'z']
[0::2] = [6,7]

Traceback (most recent


File "<pyshell#17>",
l [0::2] = [6,7]
ValueError: attempt to
to extended slice of

call last):
line 1, in -toplevelassign sequence of size 2
size 3

Operador in
Permitesaberseumelementopertenceaumalista
Servetambmparastrings
Ex.:
>>> lista = [1, 'a', 'bc']
>>> 1 in lista
True
>>> 2 in lista
False
>>> 'b' in lista
False
>>> 'b' in lista[2]
True
>>> 'bc' in 'abcd'
True

Inicializando listas
Nopossvelatribuiraumaposioinexistentede

umalista
>>> vetor = []
>>> vetor [0] = 1
Traceback (most recent call last):
File "<pyshell#21>", line 1, in -toplevelvetor [0] = 1
IndexError: list assignment index out of range

Seumalistavaiserusadacomoumarray,isto,vai

conterumnmeropredeterminadodeelementos,
convenienteinicila
>>>
>>>
>>>
[3,

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

Usando None
Nousodeestruturasdedados,svezesimportante

preencherumaposiocomumvalornovlido
Amelhoropoparaesseusoempregarovalor

especialNone

Nofazpartedetiponenhum

melhorqueusar0,[]ouumastringvazia

tilparacriarumalistavaziamascomumnmero

conhecidodeposies.Ex.:
>>> lista = [None]*5
>>> lista
[None, None, None, None, None]

Len, min e max


len(lista)retornaonmerodeelementosdelista
min(lista)emax(lista)retornamomenor/maior

elementodelista
Ex.:
>>>
>>>
1
>>>
5
>>>
9
>>>
'c'

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

min e max
Naverdade,minemaxpodemserusadostambmcom

vriosargumentosaoinvsdeumalista
Ex.:
>>> min (1,2,3,4)
1
>>> max (3,4,5)
5
>>> max ([],[1],['a'])
['a']

A funo list
Podeserusadaparaconverterumastringnumalista
tilpoisumalistapodesermodificada,masumastring,no
Parafazeratransformaoinversa,podeseusaromtodojoin

(veremosmtodosmaistarde)
Ex.:

>>> lista = list('alo')


>>> lista
['a', 'l', 'o']
>>> lista[1]='xx'
>>> lista
['a', 'xx', 'o']
>>> ''.join(lista)
'axxo'

A funo range
Retornaumaprogressoaritmticadeinteirosnumalista
Formageral:range(incio,parada,incremento)
incio(opcional)oprimeirovalorasergerado(default:0)
paradaolimitedaprogresso:aprogressoterminano
ltimovalorantesdeparada
incremento(opcional)opassodaprogresso(default:1)
Ex.:
>>>
[0,
>>>
[2,
>>>
[5,

range(3)
1, 2]
range(2,5,2)
4]
range(5,2,-2)
3]

Comando for
Permiteiterarsobreoselementosdeumalista
Formageral:forvarinlista : comandos

Oscomandossorepetidosparacadavalordelista

Durantearepetio,varpossuiovalorcorrentedalista

Umagrandeutilidadedafunorangeconstruira

listadeiterao
Ex.:
>>>for i in range(1,7): print i,
1 2 3 4 5 6

Comparando listas
Listassocomparadaslexicograficamente
Seduaslistassoiguaisatosksimoselementos,o
resultadodacomparaodependedacomparao
entreos(k+1)simoselementos

Sealgumadaslistastemsomentekelementos,entoestaa
menor

Duaslistassoiguaisseesomentesetmomesmo
comprimentoetodososelementosdemesmaposio
soiguais

Umalistamaiorqueumnmeromasmenorque

umastring

Nomepergunteporqu!

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 list


Umavariveldotipolistanaverdadecontmuma

refernciaparaumvalordotipolista

Atribuirumavarivelaoutra,criaumanovareferncia
masnoumanovalista

Parasecriarumnovovalor,podeseusaruma
expressoqueretorneovalordesejado

Parasaberseduasvariveissereferemaomesmo
valorpodeseusarooperadoris

Variveis do tipo list


>>> a = b = [1,2,3]
>>> c = a
>>> d = c[:]
>>> a is b
True
>>> c is b
True
>>> d is c
False
>>> a [1]=5
>>> b
[1, 5, 3]
>>> d
[1, 2, 3]

A Classe list
Umalistanaverdadeumobjetodeumaclassechamada

list

NovimosaindaprogramaoOO,masalgunspontos
devemserenfatizados

Listaspossuemmtodosquepodemseraplicadosaelas
Ummtodosemelhanteaumafuno,masso
invocadosdeformadiferente:objeto.mtodo(args)
Ex.: lista.reverse()inverteaordemdoselementos
dalista
Parasabertodososmtodosdelistas,escreva
help(list)

Alguns mtodos da classe list


append(elemento)

Acrescentaoelementonofimdalista

Observequeaoperaoalteraalista,eno
simplesmenteretornaumalistamodificada

Ex.:
>>>
>>>
>>>
[1,
>>>
>>>
[1,

lista = [1,2]
lista.append(3)
lista
2, 3]
lista.append([4,5])
lista
2, 3, [4, 5]]

Alguns mtodos da classe list


count(elemento)
Retornaquantasvezesoelementoaparecenalista
Ex.:
>>> [1,2,3,1,2,3,4].count(1)
2

extend(lista2)
Acrescentaoselementosdelista2aofinaldalista
OBS.:Alteraalistaaoinvsderetornaralistaalterada
Ex.:
>>>
>>>
>>>
[1,

lista=[1,2]
lista.extend([3,4])
lista
2, 3, 4]

Alguns mtodos da classe list


count(elemento)
Retornaquantasvezesoelementoaparecenalista
Ex.:
>>> [1,2,3,1,2,3,4].count(1)
2

extend(lista2)
Acrescentaoselementosdelista2aofinaldalista
OBS.:Alteraalistaaoinvsderetornaralistaalterada
Ex.:
>>>
>>>
>>>
[1,

lista=[1,2]
lista.extend([3,4])
lista
2, 3, 4]

Alguns mtodos da classe list


index(elemento)
Retornaondicedaprimeiraocorrnciadeelementona
lista
Umerroocorreseelementonoconstadalista
Ex.:
>>> lista = [9,8,33,12]
>>> lista.index(33)
2
>>> lista.index(7)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in -toplevellista.index(7)
ValueError: list.index(x): x not in list

Alguns mtodos da classe list


insert(indice,elemento)
insereelementonalistanaposioindicadaporndice
Ex.:
>>>
>>>
>>>
[0,

Comooextend,alteraalistaaoinvsderetornaralista

lista = [0,1,2,3]
lista.insert(1,'dois')
lista
'dois', 1, 2, 3]

Ovalorretornado None!

Atribuiesafatiasservemparaamesmafinalidade
massomenoslegveis
>>>
>>>
>>>
[0,

lista = [0,1,2,3]
lista [1:1] = ['dois']
lista
'dois', 1, 2, 3]

Alguns mtodos da classe list


pop(ndice)
Removedalistaoelementonaposiondiceeoretorna
Sendicenoformencionado,assumidooltimo
Ex.:
>>>
>>>
4
>>>
[1,
>>>
2
>>>
[1,

lista = [1,2,3,4]
lista.pop()
lista
2, 3]
lista.pop(1)
lista
3]

Alguns mtodos da classe list


remove(elemento)
Removedalistaoprimeiroelementoigualaelemento
Senoexistetalelemento,umerrogerado
Ex.:
>>> lista = ['oi', 'alo', 'ola']
>>> lista.remove('alo')
>>> lista
['oi', 'ola']
>>> lista.remove('oba')
Traceback (most recent call last):
File "<pyshell#24>", line 1, in -toplevellista.remove('oba')
ValueError: list.remove(x): x not in list

Alguns mtodos da classe list


reverse()
Inverteaordemdoselementosdalista
Ex.:
>>>
>>>
>>>
[3,

lista=[1,2,3]
lista.reverse()
lista
2, 1]

Alguns mtodos da classe list


sort(cmp=None,key=None,reverse=False)
Ordenaalista
Osargumentossoopcionais.Pordefault,alista
ordenadacrescentemente
Ex.:
>>>
>>>
>>>
[1,

lista = [9,8,7,1,4,2]
lista.sort()
lista
2, 4, 7, 8, 9]

Alguns mtodos da classe list


sort(cmp=None,key=None,reverse=False)
possvelobteraordeminversa,passandoTrueparao
argumentoreverse
Ex.:
>>>
>>>
>>>
[9,

lista = [9,8,7,1,4,2]
lista.sort(reverse=True)
lista
8, 7, 4, 2, 1]

OBS.:Anotaoacimapermitepassarumargumentosem
especificarosanteriores,maspoderamosterescrito:
>>>
>>>
>>>
[9,

lista = [9,8,7,1,4,2]
lista.sort(None,None,True)
lista
8, 7, 4, 2, 1]

Alguns mtodos da classe list


sort(cmp=None,key=None,reverse=False)
Oargumentocmpespecificaumafunodecomparao

umafunoqueosortchamaparadefinirseumelemento
anteriorouposterioraoutro
Afunoaserpassadatemaformacomp(elem1,elem2)edeve
retornaruminteironegativocasoelem1sejaanterioraelem2,
positivocasoelem2sejaanterioraelem1ezerosetantofaz

Ex.:
>>> def compara(elem1,elem2):
return elem1%10 - elem2%10
>>> compara(100,22)
-2
>>> lista=[100,22,303,104]
>>> lista.sort(compara)
>>> lista
[100, 22, 303, 104]

Alguns mtodos da classe list


sort(cmp=None,key=None,reverse=False)
Oargumentokeyespecificaumafunoaplicadaacada
elemento

Seforpassadaumafunof,emvezdeordenaroselementos
baseadoemseusvaloresv,ordenabaseadoemf(v)

Ex.:
>>> lista = ['abc','de','fghi']
>>> lista.sort(key=len)
>>> lista
['de', 'abc', 'fghi']

Matrizes
Listaspodemserusadasparaguardarmatrizes
Porexemplo,podemoscriarumamatrizidentidadede

3x3comocdigo:
m = []
for i in range(3):
m.append([0]*3)
m[i][i]=1

Obs.:Noboaidiainiciarumamatrizassim:
m = [[0]*3]*3
for i in range(3): m[i][i]=1
print m
Resultado:[[1, 1, 1], [1, 1, 1], [1, 1, 1]]

(Porqu?)

Exerccios
Escrevaumprogramaqueintercaleoselementosde

duaslistasl1el2

Exemplo:paral1 = [1,2,3]el2 =
['a','b','c','d','e'],oprogramadeve
computaralista [1,'a',2,'b',3,'c','d','e']

Escrevaumprogramaparacomputaroprodutode

duasmatrizesm1em2

Exerccios
Escrevaumprogramaparacomputarotringulode

Pascalatalinhan,ondenumvalorinteiro
positivolidodalinhadecomando

Lembresequeoelementonaisimalinhaejsima
colunadotringulodePascalcontmonmerode
combinaesdeielementosjaj
Otringulodeveserpostonumalistaondeoisimo
elementoumalistacomaisimalinhadotringulo
Ex:

Quantas linhas? 7
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4,
6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15,
20, 15, 6, 1]]

Você também pode gostar