Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] Slicing em Tuplas e Listas

Avalie este Post de Blog

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:

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']
>>>
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]
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.




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:
Código :
>>> bandas = ["Rush", "The Cure", "Pink Floyd", "The Doors"]
>>> bandas[-1] = "Dr. Sin"
>>> print bandas
['Rush', 'The Cure', 'Pink Floyd', 'Dr. Sin']
>>>
É 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"
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')
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")
>>> bandas2 = bandas[:-1] + ("Dr. Sin",)
>>> print bandas
('Rush', 'The Cure', 'Pink Floyd', 'The Doors')
>>> print bandas2
('Rush', 'The Cure', 'Pink Floyd', 'Dr. Sin')
Preste bem atenção: Eu não alterei a tuplas inicial, eu criei uma nova tupla com base na antiga.




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:
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']
>>>
É, 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 = bandas[:2] + ["Dr. Sin", "Mr. Big"] + bandas[3:]
>>> 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.

Por hoje é só!
Até mais...

Atualizado 01-09-2010 em 09:09 por Magnun

Categorias
Python , Artigos , Artigos , Cursos , Curso de Python

Comentários

Página 1 de 2 12 ÚltimoÚltimo
  1. Avatar de kakinho
    bom...
  2. Avatar de fabiocs
    valeu por mais esta aula...
  3. Avatar de victoreng
    Para os preguiçosos de plantão....oque não deve existir nesse curso...afinal quem quer apreender a programar não tem preguiça....mas... segue abaixo a sintaxe do comando insert

    [I][U]listname[/U][/I].insert([I][U]position[/U][/I],[I][U]argument[/U][/I])
    Ex.: bandas.insert(2,"Abba")

    Abraços, e desculpa invadir sua posição Magnum
  4. Avatar de Magnun
    Olá victoreng,

    Mandou bem cara! Não precisa se desculpar, é sempre bom ver pessoas interessadas em complementar o assunto abordado! Isso torna a aula mais completa e interativa.

    Até mais...
  5. Avatar de fabraga
    Eu tenho uma pergunta que alguns outros programadores que estão aqui aprendendo Python poderiam ter também ao chegar nesse ponto. Como qualquer aluno interessado em aprender mesmo a linguagem, estou com o terminal do Python aberto na outra janela e assim testando cada código apresentado aqui nas aulas. Uma dúvida que me veio agora foi quando tentei inserir uma nova banda no final da lista de bandas. Não sei como fazê-lo! Se eu inserir uma banda qualquer na posição -1, a última banda vai continuar sendo "The Doors". Então parece que não é possível inserir um item na última posição nem com + nem usando a função insert. Talvez apenas com gambiarra... (?)
  6. Avatar de Magnun
    Use o método append:
    >>> bandas
    ['Rush', 'The Cure', 'Pink Floyd', 'The Doors']
    >>> bandas.append('Foo Fighters')
    >>> bandas
    ['Rush', 'The Cure', 'Pink Floyd', 'The Doors', 'Foo Fighters']
    >>>
  7. Avatar de fabraga
    Era isso! Resolvido o problema.

    Mais uma função pra coleção...

    Obrigado! :)
  8. Avatar de hloliveira
    Olá Pessoal, e parabéns Magnun pelo curso, realmente está interessante e com momentos divertidos (posts de games ... hehehe). Mas eu tenho uma dúvida sobre o slicing e a imutabilidade das tuplas. Veja meu exemplo a seguir:
    >>> bandas = ("Rush", "The Cure", "Pink Floyd", "The Doors")
    >>> bandas
    ('Rush', 'The Cure', 'Pink Floyd', 'The Doors')
    >>> bandas = bandas[0], bandas[1], bandas[2], "Dr. Sin"
    >>> bandas
    ('Rush', 'The Cure', 'Pink Floyd', 'Dr. Sin')
    >>>
    Em princípio, parece que a tupla foi alterada...e como fica a imutabilidade?
    Abraços.
  9. Avatar de fabraga
    Eu creio que é porque vc está "recriando" a variável (e não "alterando").
  10. Avatar de fabraga
    £$*
    Atualizado 30-08-2011 em 20:25 por fabraga
Página 1 de 2 12 ÚltimoÚltimo

+ Enviar Comentário