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 2 de 2 PrimeiroPrimeiro 12
  1. Avatar de fabraga
    47,5
    Atualizado 30-08-2011 em 20:25 por fabraga
  2. 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?
  3. 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?
  4. Avatar de fabraga
    Claudiodf,

    Por favor inclua sua pergunta aqui abaixo.
    Atualizado 30-08-2011 em 20:27 por fabraga
  5. 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
  6. 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.
  7. 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]
  8. 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']
Página 2 de 2 PrimeiroPrimeiro 12

+ Enviar Comentário