25 minutos de leitura

Lista em Python: o que são e como funcionam

Por Renata Lopes
Conteúdos do artigo

Já conhece a lista em Python? Quer entender como manipular listas e quais são suas principais utilidades e métodos? Sabe qual a diferença entre listas e tuplas? Este artigo responde responde isso e muito mais! Aproveite ao máximo todo o potencial dessa estrutura de dados essencial para a programação em Python.

A lista em Python é uma das estruturas de dados fundamentais da linguagem Python. Além de possuir grande versatilidade, as listas são extremamente relevantes para iniciantes na programação, por incorporar uma variedade de conceitos básicos de Python como mutabilidade, indexação, iteração e slicing. Mas você já conhece as listas de Python a fundo?

Neste artigo, vamos nos aprofundar nas listas em Python e aprender a utilizá-las em seus códigos. Ao longo do texto, você aprenderá como criar e manipular uma lista em Python, quais os principais métodos de listas, e como elas se relacionam e com outros tipos de dados de Python, como strings, tuplas e vetores. Vamos lá!

O que é uma lista em Python?

Uma lista em Python é uma estrutura de dados que armazena uma sequência de valores. As listas em Python são classificadas como um tipo de dado mutável, e portanto não possuem tamanho fixo: podemos adicionar ou remover elementos de listas de maneira dinâmica ao longo do código.

Os valores dentro de uma lista podem ser de diferentes tipos, como números inteiros (ints) e números reais (floats), textos (strings), valores verdadeiros ou falsos (bools) e até mesmo outras estruturas de dados, como dicionários, tuplas ou outras listas.

Para que serve uma lista em Python?

Frequentemente usamos as listas em Python para guardar uma sequência de valores de nosso interesse. Esses valores podem representar o número vendas mensais de uma loja, ou os nomes de animais de estimação de alguém. Além disso, a ordem em que os valores estão armazenados também costuma representar alguma informação. No caso do número de vendas mensais, faz sentido criar a lista de forma que o primeiro elemento seu seja o número de vendas em Janeiro, seguido das vendas em Fevereiro, Março e assim por diante.

Como criar uma lista em Python?

Para criar uma lista, basta utilizar colchetes ( [ ] ) e escrever os valores dentro deles, separados por vírgulas ( , ):

numeros = [1, 2, 3, 4, 5]

Não é obrigatório que todos os valores sejam do mesmo tipo de dado. Dentro de uma mesma lista, podemos misturar valores de diferentes tipos:

minha_lista = [10, "Asimov", 3.15, True, "Python"]

Como criar uma lista vazia

Para criar uma lista vazia em Python, podemos abrir e fechar colchetes sem inserir nenhum valor dentro deles:

lista_vazia = []

O mesmo acontece se usarmos a função list() sem passar nenhum valor como argumento:

lista_vazia = list()

Como criar uma lista dentro de lista

Para criarmos listas dentro de listas (também conhecido como lista aninhada), é preciso abrir e fechar múltiplos colchetes:

lista_aninhada = [1, 2, ["olá", "mundo"], 3, 4, 5]

Tome cuidado para não esquecer um colchete aberto sem fechá-lo. Caso contrário, você encontrará um erro de sintaxe (SyntaxError), o que travará o seu programa:

lista_aninhada = [1, 2, ["olá", "mundo"], 3, 4, 5
# SyntaxError: '[' was never closed

Como criar uma lista por compreensão de lista

Uma compreensão de lista é uma forma de criarmos uma lista em Python a partir de outra. As compreensões de lista possuem uma sintaxe um pouco mais avançada, que essencialmente combina um for loop com a criação de uma lista nova:

numeros = [1, 2, 3, 4, 5]

numeros_vezes_dois = [n * 2 for n in numeros]

print(numeros_vezes_dois)
# output: [2, 4, 6, 8, 10]

No exemplo acima, a lista numeros_vezes_dois é composta pelos elementos da lista numeros multiplicados por 2. Esta lógica está explícita na expressão n * 2 for n in numeros.

Como usar listas em Python?

Assim como outras estruturas de dados em Python, as listas em Python possuem diversas funcionalidades específicas, como adicionar ou remover algum elemento. Geralmente, estas funcionalidades estão implementadas na forma de métodos de lista ou pelo uso de operadores em Python.

Vamos conhecer a seguir algumas das principais formas de usar listas em Python.

Adicionar um elemento a uma lista

Para adicionar um elemento a uma lista, podemos utilizar o método append():

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

print(minha_lista)
# output: [1, 2, 3, 4]

Acessar um elemento em uma lista

Para acessar um elemento, utilizamos o índice do elemento e o passamos para a lista através de colchetes ( [ ] ). Cada elemento dentro de uma lista possui um índice numérico partindo de zero. Assim, podemos acessar o primeiro elemento de uma lista com a sintaxe minha_lista[0], o segundo com minha_lista[1] e assim por diante.

Veja outros exemplos abaixo:

minha_lista = ["olá", "mundo", "Asimov", "Academy"]

print(minha_lista[0])  # Primeiro elemento
# output: olá

print(minha_lista[2])  # Terceiro elemento
# output: Asimov

Há dois pontos a destacar sobre os índices de uma lista. O primeiro é que podemos passar índices negativos para pegar elementos partindo do final da lista:

minha_lista = ["olá", "mundo", "Asimov", "Academy"]

print(minha_lista[-1])  # Último elemento
# output: Academy

print(minha_lista[-2])  # Penúltimo elemento
# output: Asimov

O segundo ponto é que índices além dos limites da lista causam um exceção do tipo IndexError, portanto cuide para não exceder os seus limites:

minha_lista = ["olá", "mundo", "Asimov", "Academy"]

print(minha_lista[100])
# IndexError: list index out of range

Modificar um elemento em uma lista

Para modificar um elemento de uma lista, usamos a mesma sintaxe usada para acessar um elemento, e o atribuímos a algum novo valor. Por exemplo, minha_lista[1] = "Novo Valor" atualizará o segundo valor da lista minha_lista para "Novo Valor".

Acompanhe nos exemplos abaixo:

minha_lista = ["olá", "mundo", "Asimov", "Academy"]

minha_lista[1] = "Novo Valor"
print(minha_lista)

# output: ['olá', 'Novo Valor', 'Asimov', 'Academy']

Remover um elemento de uma lista

Para remover um elemento de uma lista, usamos a palavra-chave del junto do índice do elemento que queremos remover:

minha_lista = ["olá", "mundo", "Asimov", "Academy"]

del minha_lista[1]
print(minha_lista)

# output: ['olá', 'Asimov', 'Academy']

Como verificar se uma lista está vazia

Uma lista vazia em Python possui zero elementos dentro de si. Portanto, uma forma de verificar se a lista está vazia é usar a função len() e comparar o resultado obtido com zero:

minha_lista = []

if len(minha_lista) == 0:
    print('Lista está vazia')
else:
    print('Lista não está vazia')

Para simplificar o processo acima, Python também nos permite verificar se uma lista está vazia usando apenas a palavra-chave if, fazendo assim uma comparação mais sucinta:

minha_lista = []

if minha_lista:  # Equivalente a if len(minha_lista) == 0:
    print('Lista está vazia')
else:
    print('Lista não está vazia')

Buscar um elemento em uma lista

Podemos verificar se um elemento qualquer existe dentro de uma lista de Python usando o operador in. Por exemplo, a expressão 2 in [1, 2, 3] resulta em True porque o valor 2 está na lista.

Veja outros exemplos de uso:

minha_lista = [1, 2, 3, 4, 5]

print(1 in minha_lista)
# output: True

print(10 in minha_lista)
# output: False

print('1' in minha_lista)
# output: False

Juntar duas listas em Python

Podemos juntar duas listas em Python utilizando o operador de soma ( + ). Essa operação realiza a concatenação das duas listas, isto é, coloca todos os elementos da segunda lista ao final da primeira:

l1 = [1, 2, 3]
l2 = [4, 5, 6]

minha_lista = l1 + l2
print(minha_lista)
# output: [1, 2, 3, 4, 5, 6]

Os principais métodos de lista em Python

Como vimos anteriormente, as listas em Python possuem métodos: funções que estão atreladas ao tipo de dado lista. Vamos agora passar pelos principais métodos de listas em Python, explicando como e para que usá-los.

Adicionar elementos com append() e extend()

Já aprendemos sobre o método de listas append(). Ele é usado para adicionar um valor como um elemento ao final de uma lista qualquer:

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

print(minha_lista)

# output: [1, 2, 3, 4]

Podemos também usar o método de lista extend() para adicionar valores novos a uma lista. Este método pega todos os elementos de uma outra sequência e os adiciona para dentro da lista, um a um:

minha_lista = [1, 2, 3]
minha_lista.extend([4, 5])

print(minha_lista)

# output: [1, 2, 3, 4, 5]

Qual a diferença entre os métodos append() e extend()? Enquanto o método append() adiciona um único elemento (mesmo que este seja uma sequência), o método extend() adiciona um elemento na lista para cada elemento existente. Note a diferença sutil no código abaixo, ao utilizarmos o append() no lugar do extend():

minha_lista = [1, 2, 3]
minha_lista.append([4, 5])

print(minha_lista)

# output: [1, 2, 3, [4, 5]]

Inserir elementos em uma posição específica com insert()

O método insert() funciona de forma similar ao append(), porém permite escolher a posição em que inserir o valor, ao invés de automaticamente adicioná-lo ao final da lista. O elemento na posição escolhida acaba “empurrando” todo o resto da lista para a direita.

Veja o exemplo:

minha_lista = ["oi", "tudo", "bem?"]
minha_lista.insert(1, "Python")

print(minha_lista)

# output: ['oi', 'Python', 'tudo', 'bem?']

Remover elementos com pop() e remove()

Além da palavra-chave del, podemos usar os métodos pop() e remove() para remover elementos de uma lista. O método pop() retira o último elemento da lista e o retorna, funcionando quase como um “append() ao contrário”:

minha_lista = ["oi", "tudo", "bem?"]
ultimo_elemento = minha_lista.pop()

print(minha_lista)
# output: ['oi', 'tudo']

print(ultimo_elemento)
# output: bem?

Já o método remove() retira um item de dentro da lista, o qual devemos passar como argumento:

minha_lista = ["oi", "tudo", "bem?"]
minha_lista.remove("tudo")

print(minha_lista)
# output: ['oi', 'bem?']

Cuidado para não passar um elemento que não está na lista ao usar o método remove(). Se isso acontecer, você encontrará um ValueError:

minha_lista = ["oi", "tudo", "bem?"]
minha_lista.remove("Python")
# ValueError: list.remove(x): x not in list

Limpar uma lista com clear()

Se quisermos remover todos os elementos de uma lista, podemos usar o método clear(). Ele funciona como uma maneira de “resetar” a lista para o estado vazio:

minha_lista = ["oi", "tudo", "bem?"]
minha_lista.clear()

print(minha_lista)
# output: []

Encontrar a posição de um elemento com index()

Podemos usar o método index() para encontrar o índice de um elemento na lista:

minha_lista = ["oi", "tudo", "bem?"]
indice = minha_lista.index("oi")

print(indice)
# output: 0

Aqui vale o mesmo aviso que no método remove(): se passarmos um valor inexistente como argumento do método index(), causaremos um ValueError.

Contar ocorrências de um elemento com count()

O método count() serve para contar o número de vezes que um determinado elemento aparece na lista. Isto é útil se quisermos calcular a frequência de um elemento na lista, por exemplo:

minha_lista = [0, 1, 1, 0, 1, 1, 1, 0, 0, 1]
numeros_zero = minha_lista.count(0)

print(numeros_zero)
# output: 4

Ordenar ou inverter uma lista com sort() ou reverse()

Podemos mudar o ordenamento dos elementos de uma lista com os métodos lista sort() e reverse(). O método sort() ordena os elementos do maior para o menor:

valores = [10, 3, 9, 11, 12, 5, -1]
valores.sort()

print(valores)
# output: [-1, 3, 5, 9, 10, 11, 12]

Um ponto importante com o método sort() é que os elementos devem ser comparáveis entre si. Por exemplo, se tentarmos usar o método sort() em uma lista contendo números e strings, o Python causará um , já que ele não sabe qual valor considerar “maior” que outro:

valores = [10, 3, "Asimov"]
valores.sort()
# TypeError: '<' not supported between instances of 'str' and 'int'

Já o método reverse() simplesmente inverte o ordenamento da lista. O primeiro elemento se torna o último, e assim por diante:

minha_lista = ["oi", "tudo", "bem?"]
minha_lista.reverse()

print(minha_lista)
# output: ['bem?', 'tudo', 'oi']

Criar uma cópia de uma lista com copy()

Muitos iniciantes em programação Python cometem o erro de criar uma segunda variável para uma lista, na tentativa de fazer uma cópia da lista. Isto não funciona, como fica evidente no trecho de código abaixo:

lista1 = [1, 2, 3]
lista2 = lista1

del lista2[0]  # primeiro elemento da lista2 deletado

print(lista1)  # lista1 também foi afetada??
# output: [2, 3]

Isso acontece porque as listas são mutáveis. Portanto, as duas variáveis estão “apontando” para o mesmo objeto de lista. Quando alteramos este objeto por meio da variável lista2, essa mudança se refletirá ao exibirmos o valor da variável lista1 — afinal de contas, ambas estão vinculadas ao mesmo objeto.

No lugar disso, se quisermos trabalhar com uma cópia independente da lista, precisamos utilizar o método copy():

lista1 = [1, 2, 3]
lista2 = lista1.copy()  # cópia independente criada

del lista2[0]  # primeiro elemento da lista2 deletado

print(lista1)  # lista1 não foi afetada!
# output: [1, 2, 3]

Listas e outras estruturas de dados em Python

Agora que já aprendemos o que são listas, como criar e usar listas em Python, e quais os seus principais métodos, vamos entender como as listas se comparam a outros tipos de dados muito comuns na linguagem Python.

Como transformar uma lista em um string?

Para transformar uma lista em um string, podemos simplesmente utilizar a função str(). Isto produzirá uma representação em texto da lista e de seus elementos:

minha_lista = [1, 2, 3]
minha_lista_texto = str(minha_lista)

print(minha_lista_texto)
# output: [1, 2, 3]


print(type(minha_lista_texto))
# output: <class 'str'>

Apesar do output visualmente semelhante, não se engane: a variável minha_lista_texto é do tipo string, ou seja, um texto.

Se quisermos adicionar algum caractere específico ou formatação entre os valores da lista, podemos utilizar o método de string join(), que une os elementos da lista em um string, ao mesmo tempo em que insere caracteres entre os elementos.

Veja o exemplo:

minha_lista = [1, 2, 3]
texto = "---".join(minha_lista)

print(texto)
# output: 1---2---3

Qual é a diferença entre uma lista e uma tupla em Python?

Listas e tuplas são estruturas de dados muito semelhantes em Python. A principal diferença entre elas é que as tuplas são imutáveis, enquanto as listas são mutáveis. Isso significa que não é possível adicionar, remover ou modificar valores dentro de tuplas.

Isso pode parecer uma diferença pequena, mas tem algumas consequências práticas. Por exemplo, tuplas podem ser utilizadas em locais onde os dados devem obrigatoriamente ser imutáveis, como em chaves de um dicionário.

Qual é a diferença entre uma lista e um conjunto (set) em Python?

Listas e conjuntos (sets) são ambos sequências mutáveis de elementos. Contudo, diferente de listas, conjuntos não possuem ordem. Em decorrência disso, não é possível acessar o primeiro ou terceiro elemento de um conjunto, já que eles não permitem indexação.

Outra diferença é que os elementos de um conjunto são únicos, enquanto em uma lista o mesmo elemento pode aparecer mais de uma vez. Uma consequência interessante disso é que, se quisermos remover valores duplicados de uma lista, podemos transformar uma lista em um conjunto (através da função set() ) e depois de volta para uma lista, conforme o exemplo abaixo:

minha_lista = [0, 1, 1, 0, 1, 1, 0, 0]
minha_lista = list(set(minha_lista))

print(minha_lista)
# output: [0, 1]

Qual é a diferença entre uma lista e um vetor (array) em Python?

Uma lista em Python é diferente de um vetor (também chamado de arranjo ou array). As listas não possuem as operações que esperamos de um vetor matemático, como soma de vetor e escalar ou produto vetorial. Se quisermos criar uma sequência de números que representem um vetor matemático, teremos que usar outras estruturas de dados, como os arrays do NumPy.

Python possui um objeto array (vetor) em sua biblioteca padrão, que é considerado um tipo de dado embutido na linguagem. Dito isso, a comunidade de ciência de dados usa quase que exclusivamente a biblioteca NumPy (nome derivado do inglês Numerical Python) para trabalhar com vetores, que precisa ser instalada com pip.

Veja no exemplo a seguir o tipo de operação que podemos fazer com vetores do NumPy, mas não com listas:

# Usando arrays do numpy
import numpy as np

a = np.array([1, 2, 3])

print(a + 5)  # Soma de vetor com escalar
# output: [6, 7, 8]


# Usando listas
a = [1, 2, 3]

print(a + 1)  # Essa operação não existe para listas!
# TypeError: can only concatenate list (not "int") to list

Como criar uma matriz com listas em Python?

Para criar uma matriz em Python utilizando listas, podemos criar listas aninhadas, isto é, listas dentro de listas. Nessa lógica, cada lista interna dentro da lista principal representa uma linha da matriz:

matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print(matriz)
# output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

primeira_linha = matriz[0]

print(primeira_linha)
# output: [1, 2, 3]

Dito isso, quando trabalhamos com análise de dados, é muito mais comum utilizarmos arrays do NumPy para representar matrizes. A construção de uma matriz no NumPy é virtualmente idêntica (usamos listas dentro de listas):

# Matriz do numpy
matriz = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(matriz)
# output: 
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

Contudo, o uso de arrays do NumPy para representar uma matriz traz grandes benefícios quando precisamos fazer cálculos matemáticos, uma vez que podemos utilizar todas as funcionalidades de álgebra linear existentes na biblioteca, além de ferramentas como a indexação avançada de arrays do NumPy para selecionar linhas ou colunas.

Conclusão

Neste artigo, aprendemos o que é uma lista em Python e como podemos criá-las e manipulá-las. Vimos também quais são os principais métodos de listas e aprendemos como as listas se relacionam a outros tipos de dado.

Resumindo: com as listas de Python, podemos trabalhar com sequências de valores de qualquer tipo e tamanho e executar diversas operações, como adicionar, remover, ordenar e buscar elementos. Portanto, é fundamental que todo programador em Python tenha um bom conhecimento das listas e suas principais funcionalidades, de modo a utilizá-las de maneira efetiva em seus projetos e soluções.

Se você quiser aprender mais sobre Python, recomendamos assistir ao Python MasterClass, o curso gratuito de Python da Asimov Academy que te leva do zero ao seu primeiro webapp em menos de duas horas. Até a próxima!

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial