Listas em Python são estrutura de dados que podem armazenar qualquer tipo de valor, inteiros, strings, floats, funções, classes, … e outros tipos.
- Podemos dizer que as Listas são como os arrays de outras linguagens de programação.
- As listas não armazenam realmente os objetos dentro dela, mas sim a referência de memória desses objetos.
Criando uma lista:
1 2 3 4 5 6 7 8 9 |
>>> l = ['a', 'b', 'c'] >>> l ['a', 'b', 'c'] >>> l[0] # retorna o primeiro item da lista 'a' >>> l[2] # retorna o terceiro item da lista 'c' >>> l[-1] # retorna o último elemento de lista, repare que a contagem dos índices de trás para frente inicia em -1 'c' |
Como mostrado acima é bem simples criar uma Lista de dados em Python, basta envolver os elementos com colchetes [ ] e separar os elementos por vírgulas.
Fazendo Slicing em uma Lista:
1 2 3 4 5 6 7 8 9 |
>>> l = ['a', 'b', 'c'] >>> l[1:3] # retorna elementos a partir do índice 1 até o índice 2 ['b', 'c'] >>> l[:2] # retorna elementos a partir do índice 0 até o índice 1 ['a', 'b'] >>> l[-2:] # retorna elementos a partir do índice -2(penúltimo item) até o fim. ['b', 'c'] |
Adicionando elementos em uma Lista:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
>>> l = ['a', 'b', 'c'] >>> l.append('d') >>> l 'a', 'b', 'c', 'd' >>> l.append(['e', 'f']) >>> l 'a', 'b', 'c', 'd', ['e', 'f'] # repare que foi adicionado uma lista na última posição. >>> l.extend(['g', 'h']) >>> l 'a', 'b', 'c', 'd', ['e', 'f'], 'g', 'h' # repare que ao contrário de .append o método .extend decompõe a lista que foi passada como argumento e coloca um item por posição na lista original. >>> l.insert(1, 'w') # adiciona a string 'w' na posição 1 da lista >>> l 'a', 'w', 'b', 'c', 'd', ['e', 'f'], 'g', 'h' |
Removendo elementos de uma lista:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>>> l = ['a', 'b', 'c', 'a'] >>> l.remove('a') >>> l ['b', 'c', 'a'] # repare que apenas a primeria ocorrência de 'a' foi removida >>> l.pop() # remove o último elemento da lista e o retorna. 'a' >>> l ['b', 'c'] >>> l.remove('a') # repare que não é possível remover um elemento que não existe :) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: list.remove(x): x not in list |
Operações em Listas:
1 2 3 4 5 6 7 8 9 10 |
>>> l = [1] + [2, 'a'] # somar duas listas, equiavalente à [1].extend([2, 'a']) >>> l [1, 2, 'a'] >>> l += [3] # equivalente à l.extend([3]) [1, 2, 'a', 3] >>> l = ['a', 'b'] >>> l * 3 # equiavalente à ['a', 'b'] + ['a', 'b'] + ['a', 'b'] ['a', 'b', 'a', 'b', 'a', 'b'] |
Porque Lista são objetos mutáveis (muito importante):
Um Objeto mutável é aquele que pode ser alterado após a sua criação, ou seja, podemos alterar o estado do objeto sem termos que criar uma cópia do mesmo. Por exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>>> l = ['a', 3.14] >>> id(l) # a função built-in retorna o endereço de memória do objeto. 1234567 # endereço de memória simbóĺico. >>> l.append('b') >>> l ['a', 3.14, 'b'] >>> id(l) 1234567 # o endereço de memória não foi alterado, ou seja, é o mesmo objeto ainda. >>> l.reverse() # inverte a lista ['b', 3.14, 'a'] >>> id(l) 1234567 # de novo o endereço de memória não foi alterado. |
Repare que as operações na lista acima afetaram sempre o mesmo objeto, sem criar outros.
Referências em Listas:
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> l = ['a', 'b'] >>> w = l >>> w, l (['a', 'b'], ['a', 'b']) >>> id(l), id(w) (1234567, 1234567) # repare que o endereço de memória é o mesmo para 'l' e 'w' >>> w.append('c') >>> w, l (['a', 'b', 'c'], ['a', 'b', 'c']) # importante: 'l' também foi alterado, pois 'l' e 'w' apontam para o mesmo endereço de memória. >>> id(l), id(w) (1234567, 1234567) # mesmo endereço de memória |
O exemplo acima, mostra que em Python atribuições a partir de Listas geram referências, por isso a variável “L” e “w” apontam para o mesmo endereço de memória.
Se tudo é referência então como criar uma cópia de uma Lista?
1 2 3 4 |
>>> l = ['a', 'b'] >>> w = l[:] # cria uma cópia de 'l' id(l), id(w) (1234567, 9876543) |
Observe que endereço de memória não é mais o mesmo, ou seja, temos duas variáveis, cada uma apontando para seu endereço de memória.
Até o próximo post