RS

Roberto Silva11/01/2024 14:00
Compartilhe

Funções em Python: Como usar listas?

  • #Python

1. Uso básico

Listas são as estruturas de dados mais básicas de Python. Elas são estruturas de dados que permitem armazenar uma coleção ordenada de valores de diferentes tipos.

Representamos uma lista colocando os valores separados por vírgulas entre [ e ].

[1, 2, 3, 4, 5]

Listas podem ser indexadas.

minhalista = [1, 2, 4, 8, 16, 32, 64]
minhalista[0], minhalista[3]

Com saída

(1, 8)
minhalista[2:5]

Com saída

[4, 8, 16]

Ao contrário de strings, as listas podem ser alteradas (elas são mutáveis). Uma forma de alterar é mudar um dos elementos da lista:

minhalista[0] = -1
minhalista

Com saída

[-1, 2, 4, 8, 16, 32, 64]

Outro forma de alterar é adicionar novos elementos no final usando o método append:

minhalista.append(128)
minhalista

Com saída

[-1, 2, 4, 8, 16, 32, 64, 128, 128]

Podemos também inserir em posições arbitrárias da lista, usando o método insert:

minhalista.insert(1, 0)
minhalista

Com saída

[-1, 0, 2, 4, 8, 16, 32, 64, 128, 128]

O uso de insert pode incorrer custo computacional maior do que o de append, então damos preferência a crescer a lista usando append, usando insert apenas quando necessário.

O método pop retorna o último objeto da lista e o retira da lista.

minhalista.pop()

Com saída

128
minhalista

Com saída

[-1, 0, 2, 4, 8, 16, 32, 64, 128]

Podemos retirar elementos em posições arbitrárias da lista usando o comando del:

del minhalista[1]
minhalista

Com saída

[-1, 2, 4, 8, 16, 32, 64, 128]

Novamente, a retirada em posições arbitrárias pode ter custo maior do que a retirada do final, então preferimos o uso de pop para diminuir a lista, quando possível.

A função len diz o número de objetos na lista.

len(minhalista)

Com saída

8

Como sempre, a indexação é verificada:

minhalista[8]

Com saída

IndexError: list index out of range

pois agora temos 8 elementos em que a contagem começa com 0 para o primeiro elemento até 7 o oitavo elemento da lista.

2. Semântica de referência

Como no caso de variáveis, as listas guardam apenas referências para objetos. Portanto, como variáveis, cada elemento da lista pode se referir a objetos de tipos distintos. Isto é, as listas podem ser mistas.

listamista = [1, 2.3, 2 + 3j, 'esquisito']
listamista

Com saída

[1, 2.3, (2+3j), 'esquisito']

Podemos inclusive colocar outras listas dentro de uma lista, formando uma estrutura aninhada.

listaesquisita = [3, 4, listamista, minhalista]
listaesquisita

Com saída

[3, 4, [1, 2.3, (2+3j), 'esquisito'], [-1, 2, 4, 8, 16, 32, 64, 128]]
listaesquisita[1]

Com saída

4
listaesquisita[2]

Com saída

[1, 2.3, (2+3j), 'esquisito']
listaesquisita[2][1]

Com saída

2.3

Lembre-se que nesses casos estamos guardando apenas referências para as listas aninhadas.

Se dentro da lista l3 guardamos uma referência para outra lista l2, então, ao alterarmos o conteúdo de l2 essa alteração será visível em l3.

l1 = [1, 2, 3]
l2 = [5, 4, 3]
l3 = [0, l1, l2]
l3

Com saída

[0, [1, 2, 3], [5, 4, 3]]
l2[1] = -1
l2

Com saída

[5, 4, 3]
l3

Com saída

[0, [1, 2, 3], [5, 4, 3]]
l1.append(4)
l3

Com saída

[0, [1, 2, 3, 4], [5, 4, 3]]

Em princípio, nada impede que façamos a inserção de uma referência para a lista dentro da própria lista. Nesse caso, tem-se que tomar cuidado ao manipular essa lista, para evitar problemas de código em loop infinito.

l4 = [1,2]
l4

Com saída

[1, 2]
l4.append(l4)
l4 

Com saída

[1, 2, [...]]

O [...] que aparece acima é o interpretador Python evitando recursão infinita: ao perceber que a lista está dentro da própria lista, ele evita tentar imprimir o conteúdo novamente.

l4.append(3)
l4

Com saída

[1, 2, [...], 3]
par1 = [1, 2]
par2 = [3, 4]
par1.append(par2)
par2.append(par1)
par1

Com saída

[1, 2, [3, 4, [...]]]
par2

Com saída

[3, 4, [1, 2, [...]]]

Neste caso, temos uma recursão mútua entre as listas par1 e par2.

Lembre-se que se mais de uma variável referencia a mesma lista então ao alteramos a lista por meio de uma variável ela terá valor alterado quando acessada por outra variável.

x = [1,2,3]
y = x
x

Com saída

[1, 2, 3]
y

Com saída

[1, 2, 3]
x[2] = 4
x

Com saída

[1, 2, 4]
y

Com saída

[1, 2, 4]

Se quisermos evitar esse tipo de comportamento, precisamos fazer uma cópia da lista ao colocar em outra variável.

z = x.copy()
z

Com saída

[1, 2, 4]

Neste caso, é criado um novo objeto com um cópia dos valores do objeto referenciado por x, e uma referência para esse novo objeto é colocada em z, e portanto x e z estão referenciando objetos distintos.

x[2] = 3
x

Com saída

[1, 2, 3]
y

Com saída

[1, 2, 3]

z

Com saída

[1, 2, 4]

No caso de listas, uma outra forma de fazer cópia é simplesmente acessar um slice com todos os elementos.

z = x[:]
z

Com saída

[1, 2, 3]

O link com a documentação completa está disponível em: https://docs.python.org/pt-br/3/tutorial/datastructures.html

Compartilhe
Comentários (0)