Listas em Python
A lista (list) é uma estrutura de dados que armazena uma sequência de elementos. Em muitos outros linguagens, essa estrutura é conhecida como array.
Criando uma Lista
Para criar uma lista, utilizamos colchetes []
numbers = [1, 2, 3, 4, 5]
Da mesma forma, podemos criar listas com outros tipos de dados, como strings:
people = ["Tom", "Sam", "Bob"]
Também é possível utilizar a função construtora list()
numbers1 = []
numbers2 = list()
Essas duas definições criam listas vazias.
Uma lista não precisa conter apenas objetos de um único tipo. É possível incluir strings, números e outros tipos de dados em uma mesma lista:
objects = [1, 2.6, "Hello", True]
Para verificar o conteúdo da lista, podemos utilizar a função print
numbers = [1, 2, 3, 4, 5]
people = ["Tom", "Sam", "Bob"]
print(numbers) # [1, 2, 3, 4, 5]
print(people) # ["Tom", "Sam", "Bob"]
A função list()
numbers1 = [1, 2, 3, 4, 5]
numbers2 = list(numbers1)
print(numbers2) # [1, 2, 3, 4, 5]
letters = list("Hello")
print(letters) # ['H', 'e', 'l', 'l', 'o']
Caso seja necessário criar uma lista com um mesmo valor repetido, podemos utilizar o operador *
numbers = [5] * 6 # Repete o valor 5 seis vezes
print(numbers) # [5, 5, 5, 5, 5, 5]
people = ["Tom"] * 3 # Repete "Tom" três vezes
print(people) # ["Tom", "Tom", "Tom"]
students = ["Bob", "Sam"] * 2 # Repete "Bob", "Sam" duas vezes
print(students) # ["Bob", "Sam", "Bob", "Sam"]
Acessando Elementos de uma Lista
Para acessar os elementos de uma lista, utilizamos índices, que indicam a posição do elemento na lista. Os índices começam em zero. Portanto, o primeiro elemento possui índice 0, o segundo índice 1, e assim por diante. Para acessar elementos de trás para frente, podemos usar índices negativos, começando em -1 para o último elemento.
people = ["Tom", "Sam", "Bob"]
# Acessando elementos do início
print(people[0]) # Tom
print(people[1]) # Sam
print(people[2]) # Bob
# Acessando elementos a partir do final
print(people[-2]) # Sam
print(people[-1]) # Bob
print(people[-3]) # Tom
Para modificar um elemento da lista, basta atribuir a ele um novo valor:
people = ["Tom", "Sam", "Bob"]
people[1] = "Mike" # Modificando o segundo elemento
print(people[1]) # Mike
print(people) # ["Tom", "Mike", "Bob"]
Desempacotamento de Lista
O Python permite que uma lista seja desempacotada em variáveis individuais:
people = ["Tom", "Bob", "Sam"]
tom, bob, sam = people
print(tom) # Tom
print(bob) # Bob
print(sam) # Sam
Nesse exemplo, as variáveis tom
bob
sam
people
Iterando sobre Elementos
Para iterar sobre os elementos de uma lista, podemos usar tanto o loop for
while
Exemplo com for
people = ["Tom", "Sam", "Bob"]
for person in people:
print(person)
Aqui, cada elemento da lista people
person
Exemplo com while
people = ["Tom", "Sam", "Bob"]
i = 0
while i < len(people):
print(people[i]) # Usamos o índice para acessar o elemento
i += 1
Usamos a função len()
i
Comparação de Listas
Duas listas são consideradas iguais se contêm o mesmo conjunto de elementos:
numbers1 = [1, 2, 3, 4, 5]
numbers2 = list([1, 2, 3, 4, 5])
print(numbers1 == numbers2) # True
people1 = ["Tom", "Sam", "Bob"]
people2 = ["Sam", "Bob", "Tom"]
print(people1 == people2) # False
Obtendo uma Parte da Lista
Para obter uma parte específica de uma lista, usamos uma sintaxe especial com três parâmetros opcionais: end
start
step
: Retorna os elementos da lista do início até o índicelist[:end]
(exclusivo).end
: Retorna os elementos da lista do índicelist[start:end]
até o índicestart
(exclusivo).end
: Retorna os elementos da lista do índicelist[start:end:step]
até o índicestart
(exclusivo), com um passo deend
.step
É possível também utilizar índices negativos para a seleção de partes da lista, contando a partir do final.
people = ["Tom", "Bob", "Alice", "Sam", "Tim", "Bill"]
slice_people1 = people[:-1] # Da primeira posição até o penúltimo
print(slice_people1) # ["Tom", "Bob", "Alice", "Sam", "Tim"]
slice_people2 = people[-3:-1] # Da terceira posição a partir do final até o penúltimo
print(slice_people2) # ["Sam", "Tim"]
Métodos e Funções para Manipulação de Listas
As listas em Python oferecem diversos métodos para manipular seus elementos. Aqui estão alguns dos principais:
: adiciona o elementoappend(item)
ao final da lista.item
: insere o elementoinsert(index, item)
no índice especificado.item
: adiciona todos os elementos do conjuntoextend(items)
ao final da lista.items
: remove o primeiro elemento encontrado que corresponda aremove(item)
. Se o elemento não for encontrado, lança uma exceçãoitem
.ValueError
: remove todos os elementos da lista.clear()
: retorna o índice do elemento item. Se não encontrado, lançaindex(item)
.ValueError
: remove e retorna o elemento no índice especificado. Sem índice, remove o último elemento.pop([index])
: retorna o número de vezes que item aparece na lista.count(item)
: ordena a lista em ordem crescente. Com o parâmetrosort([key])
, é possível definir uma função de ordenação.key
: inverte a ordem dos elementos na lista.reverse()
: cria uma cópia da lista.copy()
Além disso, Python fornece várias funções para uso com listas:
: retorna o tamanho da lista.len(list)
: retorna uma lista ordenada.sorted(list, [key])
: retorna o menor elemento.min(list)
: retorna o maior elemento.max(list)
Adição e Remoção de Elementos
Para adicionar elementos, utilizamos append()
extend()
insert()
remove()
pop()
clear()
Exemplo de uso:
people = ["Tom", "Bob"]
# Adiciona ao final da lista
people.append("Alice") # ["Tom", "Bob", "Alice"]
# Insere na segunda posição
people.insert(1, "Bill") # ["Tom", "Bill", "Bob", "Alice"]
# Adiciona os elementos de uma nova lista
people.extend(["Mike", "Sam"]) # ["Tom", "Bill", "Bob", "Alice", "Mike", "Sam"]
# Obtemos o índice de um elemento
index_of_tom = people.index("Tom")
# Removemos pelo índice
removed_item = people.pop(index_of_tom) # ["Bill", "Bob", "Alice", "Mike", "Sam"]
# Removemos o último elemento
last_item = people.pop() # ["Bill", "Bob", "Alice", "Mike"]
# Removemos o elemento "Alice"
people.remove("Alice") # ["Bill", "Bob", "Mike"]
# Limpamos a lista
people.clear()
print(people) # []
Verificação de Elementos
Os métodos remove
index
in
people = ["Tom", "Bob", "Alice", "Sam"]
if "Alice" in people:
people.remove("Alice")
print(people) # ["Tom", "Bob", "Sam"]
Remoção com del
Python permite a remoção de elementos também pelo operador del
people = ["Tom", "Bob", "Alice", "Sam", "Bill", "Kate", "Mike"]
del people[1] # Remove o segundo elemento
print(people) # ["Tom", "Alice", "Sam", "Bill", "Kate", "Mike"]
del people[:3] # Remove até o quarto elemento, sem incluí-lo
print(people) # ["Bill", "Kate", "Mike"]
del people[1:] # Remove a partir do segundo elemento
print(people) # ["Bill"]
Alteração de Subconjunto de Elementos
Para alterar um subconjunto de elementos, podemos utilizar o mesmo método de fatiamento:
nums = [10, 20, 30, 40, 50]
nums[1:4] = [11, 22]
print(nums) # [10, 11, 22, 50]
Aqui, nums[1:4]
[20, 30, 40]
[10, 11, 22, 50]
Contagem de Ocorrências
Para contar a presença de um elemento específico, usamos o método count()
people = ["Tom", "Bob", "Alice", "Tom", "Bill", "Tom"]
people_count = people.count("Tom")
print(people_count) # 3
Ordenação
Para ordenar uma lista em ordem crescente, usamos sort()
people = ["Tom", "Bob", "Alice", "Sam", "Bill"]
people.sort()
print(people) # ["Alice", "Bill", "Bob", "Sam", "Tom"]
Para ordenar em ordem decrescente, combinamos sort()
reverse()
people.sort()
people.reverse()
print(people) # ["Tom", "Sam", "Bob", "Bill", "Alice"]
A ordenação compara elementos de acordo com regras de menor e maior, onde strings, por exemplo, são comparadas pelo valor de cada caractere. Para ordenar ignorando maiúsculas e minúsculas, utilizamos uma função auxiliar com o parâmetro key
Além de sort()
sorted()
people = ["Tom", "bob", "alice", "Sam", "Bill"]
sorted_people = sorted(people, key=str.lower)
print(sorted_people) # ["alice", "Bill", "bob", "Sam", "Tom"]
Filtrando Lista
Para filtrar uma lista, usamos a função filter()
numbers = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
def condition(number):
return number > 1
result = filter(condition, numbers)
for n in result:
print(n, end=" ") # 2 3 4 5
A função filter()
Alternativamente, podemos utilizar uma expressão lambda para simplificar o código:
numbers = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
result = filter(lambda n: n > 1, numbers)
for n in result:
print(n, end=" ") # 2 3 4 5
Da mesma forma, podemos filtrar listas de objetos mais complexos:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
people = [
Person("Tom", 38), Person("Kate", 31), Person("Bob", 42),
Person("Alice", 34), Person("Sam", 25)
]
# Filtrando pessoas com idade superior a 33
view = filter(lambda p: p.age > 33, people)
for person in view:
print(f"Name: {person.name} Age: {person.age}")
Nesse caso, filtramos a lista de objetos Person, onde cada objeto representa uma pessoa com nome e idade. Aqui selecionamos aqueles cuja idade é maior que 33.
Mapeamento de Lista
Para aplicar transformações em cada elemento de uma lista, usamos a função map()
map(fun, iter)
A função fun
iter
O map()
numbers = [1, 2, 3, 4, 5]
def square(number):
return number * number
result = map(square, numbers)
for n in result:
print(n, end=" ") # 1 4 9 16 25
Também podemos usar expressões lambda como função de transformação:
numbers = [1, 2, 3, 4, 5]
result = map(lambda n: n * n, numbers)
for n in result:
print(n, end=" ") # 1 4 9 16 25
Da mesma forma, podemos projetar listas de objetos mais complexos:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
people = [Person("Tom", 38), Person("Kate", 31), Person("Bob", 42), Person("Alice", 34), Person("Sam", 25)]
view = map(lambda p: p.name, people)
for person in view:
print(person)
Aqui, cada objeto Person
name
Tom Kate Bob Alice Sam
Valores Mínimos e Máximos
As funções min()
max()
numbers = [9, 21, 12, 1, 3, 15, 18]
print(min(numbers)) # 1
print(max(numbers)) # 21
Cópia de Listas
Como listas são mutáveis, é importante considerar que, ao copiar uma lista de forma superficial (shallow copy), tanto a original quanto a cópia referenciam o mesmo objeto:
people1 = ["Tom", "Bob", "Alice"]
people2 = people1
people2.append("Sam")
print(people1) # ["Tom", "Bob", "Alice", "Sam"]
print(people2) # ["Tom", "Bob", "Alice", "Sam"]
Para evitar esse comportamento, podemos fazer uma cópia profunda usando o método copy()
people1 = ["Tom", "Bob", "Alice"]
people2 = people1.copy()
people2.append("Sam")
print(people1) # ["Tom", "Bob", "Alice"]
print(people2) # ["Tom", "Bob", "Alice", "Sam"]
Concatenação de Listas
Para concatenar duas listas, usamos o operador +
people1 = ["Tom", "Bob", "Alice"]
people2 = ["Tom", "Sam", "Tim", "Bill"]
people3 = people1 + people2
print(people3) # ["Tom", "Bob", "Alice", "Tom", "Sam", "Tim", "Bill"]
Listas Aninhadas
Em Python, Listas podem conter outras listas, o que permite a criação de estruturas semelhantes a tabelas, onde cada lista aninhada representa uma linha:
people = [
["Tom", 29],
["Alice", 33],
["Bob", 27]
]
print(people[0]) # ["Tom", 29]
print(people[0][0]) # Tom
print(people[0][1]) # 29
Podemos manipular listas aninhadas da mesma forma que listas regulares:
people = [
["Tom", 29],
["Alice", 33],
["Bob", 27]
]
# Criando uma nova lista aninhada
person = list()
person.append("Bill")
person.append(41)
people.append(person)
print(people[-1]) # ["Bill", 41]
# Adicionando um elemento a uma lista aninhada
people[-1].append("+99876543210")
print(people[-1]) # ["Bill", 41, "+99876543210"]
# Removendo o último elemento da lista aninhada
people[-1].pop()
print(people[-1]) # ["Bill", 41]
# Removendo a lista aninhada inteira
people.pop(-1)
# Alterando o primeiro elemento
people[0] = ["Sam", 18]
print(people) # [["Sam", 18], ["Alice", 33], ["Bob", 27]]
Iterando sobre Listas Aninhadas
Para percorrer todos os elementos em listas aninhadas, utilizamos loops aninhados:
people = [
["Tom", 29],
["Alice", 33],
["Bob", 27]
]
for person in people:
for item in person:
print(item, end=" | ")
Saída:
Tom | 29 | Alice | 33 | Bob | 27 |