CodeGym /Cursos /Python SELF PT /Trabalho prático com listas

Trabalho prático com listas

Python SELF PT
Nível 7 , Lição 9
Disponível

9.1 Criando uma cópia de uma lista

Criar uma cópia de uma lista em Python é uma tarefa importante, que pode ser necessária para evitar mudanças inesperadas nos dados ao manipular listas. Ao trabalhar com listas, é crucial entender a diferença entre cópia superficial (shallow) e cópia profunda (deep).

Cópia superficial

A cópia superficial cria uma nova lista, mas os elementos permanecem os mesmos (se os elementos são referências, eles são copiados como referências). Isso pode ser feito de várias maneiras:

Usando a função list():


original = [1, 2, 3]
copy = list(original)

Usando slicing:


original = [1, 2, 3]
copy = original[:]

Método copy():

Cópia profunda

A cópia profunda cria uma nova lista onde também são criadas cópias de todos os objetos aninhados. Isso é especialmente importante quando as listas contêm outros tipos de dados mutáveis, como outras listas. Para isso, utiliza-se o módulo copy:


import copy
original = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(original)

Quando usar cada método

A cópia superficial é mais rápida e adequada quando os elementos da lista são simples ou não precisam de duplicação (por exemplo, strings ou números). Cópia profunda é necessária quando os elementos da lista em si são coleções mutáveis ou quando mudanças na cópia não devem se refletir no original.

9.2 Removendo elementos de uma lista

Existe uma tarefa que é simples e complexa ao mesmo tempo: remover elemento(s) de uma lista em um loop.

Quando percorremos a lista usando um loop for, a lista retorna um objeto especial chamado iterador, que é usado pelo loop for para passar por todos os seus elementos. E se, durante o uso do iterador [pelo loop for], um elemento for removido da lista, o iterador pode não funcionar corretamente.

Se você removeu o 3º elemento, o 4º automaticamente se tornará o 3º. Mas o loop for, através do iterador, se moverá para o novo 4º elemento, que antes era o 5º. E assim o 4º elemento será pulado.

Aqui estão alguns métodos para remover elementos de forma segura:

Usando o método remove()

Se você souber exatamente qual elemento deve ser removido, pode usar remove() dentro do loop. Porém, isso pode ser ineficaz se houver muitos elementos, pois cada chamada de remove() busca o elemento antes de removê-lo, o que atrasa a execução.

Criando uma nova lista

Uma maneira mais segura é criar uma nova lista apenas com os elementos que devem ser mantidos:


original_list = [1, 2, 3, 4, 5, 6]
new_list = [x for x in original_list if x % 2 != 0]  # manter apenas números ímpares

Usando índices

Você pode usar um loop for com índice reverso para remover elementos sem risco de pular:


for i in range(len(original_list) - 1, -1, -1):
    if original_list[i] % 2 == 0:  # condição para remoção
        del original_list[i]

Quando percorremos a lista de trás para frente, os índices só mudam para elementos já percorridos.

Usando uma cópia da lista:

Vamos supor que você quer remover todos os números negativos da lista:


numbers = [1, -1, 2, -2, 3, -3]
# Cria uma cópia da lista para iteração segura
for number in numbers.copy():
    if number < 0:
        numbers.remove(number)
print(numbers) # Vai mostrar [1, 2, 3]

9.3 Concatenando listas

Muitas vezes precisamos unir duas ou mais listas em uma só. Isso pode ser feito de várias formas, cada uma adequada para diferentes tarefas e com suas particularidades.

Usando o operador +

A maneira mais simples de juntar duas listas é usar o operador +. Esse método é direto e intuitivo:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list)  # Vai mostrar [1, 2, 3, 4, 5, 6]

Método extend()

O método extend() modifica a primeira lista, adicionando no final todos os elementos da segunda lista. Isso muda a lista original:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1)  # Vai mostrar [1, 2, 3, 4, 5, 6]

Compreensão de listas (List Comprehensions)

A compreensão de listas pode ser usada para criar novas listas juntando elementos de várias listas em uma lista complexa:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = [item for sublist in [list1, list2] for item in sublist]
print(combined_list)  # Vai mostrar [1, 2, 3, 4, 5, 6]

Método append()

Você pode adicionar todos os elementos da segunda lista na primeira, um por um. É uma opção.


list1 = [1, 2, 3]
list2 = [4, 5, 6]
for x in list2:
    list1.append(x)
print(list1)  # Vai mostrar [1, 2, 3, 4, 5, 6]

Basicamente, é isso que eu queria dizer sobre listas 😊

2
Tarefa
Python SELF PT, nível 7, lição 9
Bloqueado
Ordenação sem Ordenação
Ordenação sem Ordenação
2
Tarefa
Python SELF PT, nível 7, lição 9
Bloqueado
Limpando a lista
Limpando a lista
1
Pesquisa/teste
Listas no Python, nível 7, lição 9
Indisponível
Listas no Python
Listas no Python
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION