[Curso de Python] Slicing em Tuplas e Listas
por
em 26-10-2009 às 11:11 (9786 Visualizações)
Antes de prosseguir leia os artigos anteriores aqui
Para fechar o assunto de slicing, vamos ver agora o processo de slicing em tuplas e listas. Vou abordá-las em conjunto pois a única diferença entre elas é que uma delas é imutável.
Vamos lá...
Slicing em listas e tuplas
Vamos retomar alguns exemplos que utilizei quando abordei slicing aqui. Primeiro vamos ver para as listas:
Agora para as tuplas:Código :>>> bandas = ["Rush", "The Cure", "Pink Floyd", "The Doors"] >>> print bandas[0] Rush >>> print bandas[2:] ['Pink Floyd', 'The Doors'] >>> print bandas[:3] ['Rush', 'The Cure', 'Pink Floyd'] >>> print bandas[1:3] ['The Cure', 'Pink Floyd'] >>> print bandas[-1] The Doors >>> print bandas[::-1] ['The Doors', 'Pink Floyd', 'The Cure', 'Rush'] >>> print bandas[::2] ['Rush', 'Pink Floyd'] >>>
Como podemos notar, tanto as listas como as tuplas e as strings tem o mesmo comportamento para todos esses operadores, com a diferença no tipo de dados retornado.Código :>>> bandas = ("Rush", "The Cure", "Pink Floyd", "The Doors") >>> print bandas[0] Rush >>> print bandas[2:] ('Pink Floyd', 'The Doors') >>> print bandas[:3] ('Rush', 'The Cure', 'Pink Floyd') >>> print bandas[1:3] ('The Cure', 'Pink Floyd') >>> print bandas[-1] The Doors >>> print bandas[::-1] ('The Doors', 'Pink Floyd', 'The Cure', 'Rush') >>> print bandas[::2]
A imutabilidade
Como eu disse, as tuplas e as listas se diferem apenas pela mutabilidade. As listas podem ser modificadas normalmente, já as tuplas não. Vamos ver esse exemplo:
É possível notar que a atribuição na lista foi realizada sem nenhum problema. Vamos ver o que ocorre ao realizar esse mesmo processo nas tuplas:Código :>>> bandas = ["Rush", "The Cure", "Pink Floyd", "The Doors"] >>> bandas[-1] = "Dr. Sin" >>> print bandas ['Rush', 'The Cure', 'Pink Floyd', 'Dr. Sin'] >>>
O que podemo concluir é que teremos que criar uma nova tupla igual ao que fizemos quando vimos slicing em strings. Vamos ver como fazer:Código :>>> bandas = ("Rush", "The Cure", "Pink Floyd", "The Doors") >>> bandas[-1] = "Dr. Sin" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> print bandas ('Rush', 'The Cure', 'Pink Floyd', 'The Doors')
Preste bem atenção: Eu não alterei a tuplas inicial, eu criei uma nova tupla com base na antiga.Código :>>> bandas = ("Rush", "The Cure", "Pink Floyd", "The Doors") >>> bandas2 = bandas[:-1] + ("Dr. Sin",) >>> print bandas ('Rush', 'The Cure', 'Pink Floyd', 'The Doors') >>> print bandas2 ('Rush', 'The Cure', 'Pink Floyd', 'Dr. Sin')
Possíveis erros de atribuição
Um erro muito comum quando começamos a utilizar as listas python é tentar estender uma lista. Digamos que temos a lista utilizada acima (["Rush", "The Cure", "Pink Floyd", "The Doors"]) e queremos colocar "Dr. Sin" e "Mr. Big" no lugar de "Pink Floyd". Muitos fariam da seguinte forma:
É, não deu certo . Existem 2 formas de se fazer isso, o modo correto e o modo gambiarra gambiarra. Como nosso conhecimento em Python é limitado vou mostrar o modo gambiarra:Código :>>> bandas = ["Rush", "The Cure", "Pink Floyd", "The Doors"] >>> bandas[2] = ["Dr. Sin", "Mr. Big"] >>> print bandas ['Rush', 'The Cure', ['Dr. Sin', 'Mr. Big'], 'The Doors'] >>>
Dessa forma há um desperdício de memória e processamento, uma vez que é criado uma nova lista. Para quem quiser pesquisar e aprender o modo correto, pesquise por listas e o método insert.Código :>>> bandas = ["Rush", "The Cure", "Pink Floyd", "The Doors"] >>> bandas = bandas[:2] + ["Dr. Sin", "Mr. Big"] + bandas[3:] >>> print bandas ['Rush', 'The Cure', 'Dr. Sin', 'Mr. Big', 'The Doors'] >>>
Por hoje é só!
Até mais...
Comentários
+ Enviar Comentário