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

Comentários

  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 19:25 por fabraga
  11. Avatar de fabraga
    47,5
    Atualizado 30-08-2011 em 19:25 por fabraga
  12. Avatar de fabraga
    The house was empty.
    Somebody and nobody went inside the house.
    Somebody went out through the door; nobody went out through the window.
    Who is still in the house?
  13. Avatar de fabraga
    A casa estava vazia.
    Alguém e Ninguém entratam na casa.
    Alguém saiu pela porta; Ninguém saiu pela janela.
    Quem ficou na casa?
  14. Avatar de fabraga
    Claudiodf,

    Por favor inclua sua pergunta aqui abaixo.
    Atualizado 30-08-2011 em 19:27 por fabraga
  15. Avatar de Claudiodf
    Tentei fazer esse código, mas naum consegui com numero menor que 8 se alguém souber e quiser ajudar agradeço!!! Primeiro código que faço com autoria própria estudando as aulas !!!
    Vlws...

    #!/usr/bin/env python
    # -*- coding: cp1252 -*-


    nome = raw_input ("Ola! Qual seu nome? ")
    print 'Muito prazer %s!!'%nome


    raw_input('Pressione "ENTER" para continuar\n')


    print 'Por favor %s pense em um numero maior que "8" !!\n' %nome
    raw_input('Pensou? Pressione "ENTER" para continuar...')
    raw_input('Assimilando Informacao... O numero pensado foi "X"' " PRESSIONE ENTER")


    print 'Multiplique esse numero por 5'
    raw_input('"X" x 5 "ENTER"' )


    print 'Some mais 8 ao resultado'
    raw_input(' + 8 "ENTER"')


    print 'Agora Multiplique o resultado por 4'
    raw_input(' x 4 "ENTER" para continuar')


    print 'Some mais 12'
    raw_input(' + 12 "ENTER" para continuar')


    print 'Multiplique o resultado por 5'
    raw_input('x 5 Pressione "ENTER" para continuar')
    Res = raw_input ('ATENCAOOOO Digite o resultado da sua conta: \n\a')


    n1 = Res[:2]
    c2 = 2
    c1=int(n1)


    res = (c1-c2)
    print 'O numero pensando foi: %i' %res
    raw_input('Obrigado... Pressione "ENTER" para fechar...')


    by Arcanjo
    Oo
  16. Avatar de Edon Pesotti
    Tô chegando já estudei algumas aulas e senti a diferença com C e BASH,
    agora vou ate o fim,
    bom site Heim!!!.

    Pra quem quiser outra referencia pra complementar no oficial tem bastante documentação.
  17. Avatar de Fabio Montefuscolo
    Também é possível fazer um slice a cada [B]n[/B] elementos.

    [CODE]>>> numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> numeros[::2]
    [0, 2, 4, 6, 8]
    >>> numeros[::3]
    [0, 3, 6, 9]
    >>> numeros[::4]
    [0, 4, 8]
    [/CODE]
    Ou cercar a área em em que se quer fazer o slice.
    [CODE]>>> numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> numeros[5:1:-1]
    [5, 4, 3, 2]
    [/CODE]
  18. Avatar de Andre William
    Fiz um slicing em uma lista adicionando o nome entre colchetes e deu certo.


    >>> name2 = name[:2] + ["Adam"]
    >>> print name
    ['Sam', 'Dean', 'Castiel']
    >>> print name2
    ['Sam', 'Dean', 'Adam']

+ Enviar Comentário



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L