Operações com listas em Python: como somar elementos, encontrar tamanho e manipular listas

Alura
Yan Orestes
Yan Orestes

Compartilhe

Avalie este artigo

10 minutos de leitura

O que são listas em Python e para que servem? 

Se você quer aprender como somar elementos de uma lista em Python, calcular a média, contar elementos ou remover valores de listas, este artigo mostra o passo a passo das principais operações com listas em Python.  

Veja exemplos práticos e dicas para manipular listas de forma eficiente usando funções como sum(), len(), remove(), count() e compreensões de lista do Python. 

Todo esse processo seria feito de forma automática, utilizando Python. As notas da turma foram armazenadas em uma estrutura de lista

notas = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 

Para calcular a média aritmética de uma lista de números, somamos todos os valores e dividimos pelo total de elementos. Então, precisamos descobrir dois valores: a soma das notas e a quantidade de notas

Banner promocional da Alura anunciando até 35% de desconto em cursos de tecnologia. A imagem mostra uma pessoa programando em frente ao computador e convida profissionais a evoluírem junto com as mudanças do mercado. O texto destaca a oportunidade de desenvolver novas habilidades, acessar um guia de carreira exclusivo e avançar na carreira tech com o apoio da Alura.

Como somar elementos de uma lista em Python 

Para somar todos os elementos da lista, vamos começar inicializando nossa variável que conterá o resultado da soma das notas com o valor 0, indicando que a soma ainda não foi feita: 

soma_das_notas = 0 

Assim, uma abordagem que podemos seguir é por meio da iteração sobre as notas, para cada nota, soma-se seu valor à variável soma_das_notas, dessa forma: 

for nota in notas: 
soma_das_notas += nota 
print(soma_das_notas)

E o resultado da soma: 

98.0 

Funciona perfeitamente! Mas será que não há uma maneira mais simples de somar todos os elementos de uma lista? 

Somando os elementos de uma lista com a função sum() 

A função sum Python é a forma mais recomendada para somar valores de uma lista Python, seja para listas pequenas ou grandes. Se você já pesquisou como fazer soma em Python ou como somar todos os valores de uma lista Python, essa função resolve de forma simples e eficiente. 

Vamos usar essa nova abordagem: 

notas = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 
# código omitido 
soma_das_notas = sum(notas) 
print(soma_das_notas)

Novamente, o resultado esperado: 

98.0 

Não só é mais simples usar a função sum() do que implementar um algoritmo de soma nós mesmos, como sua performance é muito melhor - um loop for é executado como bytecode Python interpretado, enquanto a função sum() é escrita puramente na linguagem C. 

Agora que já sabemos a soma das notas, precisamos descobrir a quantidade delas. 

Como saber o tamanho de uma lista em Python 

A quantidade de notas é o tamanho da lista. Podemos, é claro, contar nós mesmos e armazenar essa contagem em uma variável: 

qtd_de_notas = 15 

Tudo bem, mas essa abordagem seria problemática caso a lista mudasse de tamanho, ou até mesmo se a lista fosse maior (imagine contar número a número em uma lista de mais de 100 elementos!) 

Se já trabalhamos com outras linguagens de programação, provavelmente vimos que geralmente há uma maneira nativa mais simples para se calcular o tamanho de uma lista. No Python isso não é diferente! 

A função built-in len() retorna o comprimento de um objeto cuja classe implementa esse método, como, por exemplo, uma string ou, no nosso caso, uma lista. Vamos testá-la com a lista de notas: 

notas = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 
#código omitido 
qtd_de_notas = len(notas) 
print(qtd_de_notas)

E o resultado é o esperado: 

15 

Como calcular a média de uma lista em Python 

Agora que temos os dois valores que precisávamos, vamos calcular a média utilizando a fórmula soma_dos_numeros / quantidade_de_numeros

media_das_notas = soma_das_notas / qtd_de_notas 
print(media_das_notas) 

Agora já temos a média:

6.5333

O resultado foi divulgado aos alunos, que responderam com reclamações - a nota foi mais baixa do que o esperado. 

Após analisar as notas, percebemos que a média estava sendo calculada incluindo as notas 0 de duas pessoas estudantes que faltaram no dia da prova, o que não era justo! 

Precisamos, então, remover essas notas 0 de nossa lista e recalcular a média. 

Como remover um elemento de uma lista em Python 

Agora que já temos nossa lista completa, como podemos remover um elemento de dentro dela? Para isso, o Python nos traz o método remove(), que recebe como parâmetro o valor que queremos remover de nossa lista. Vamos testar: 

notas = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 
notas.remove(0) 
print(notas) 

Veja o resultado: 

[0, 9.0, 8.0, 5.0, 10.0, 7.0, 0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5]

Ok! Conseguimos remover um dos 0, mas o outro ainda ficou. Por que será? Acontece que o método remove() remove apenas o primeiro elemento encontrado cujo valor é igual ao parâmetro passado, não todos os elementos com esse valor. 

Precisamos, então, chamar o método remove() duas vezes? Tudo bem, isso daria certo, mas e se, em vez de duas, tivéssemos dez notas 0. Será que realmente precisaríamos repetir uma mesma linha de código dez vezes? Isso não parece o ideal. 

Conhecendo o Python e lógica de programação, uma abordagem intuitiva para esse problema seria iterar sobre a lista com um loop for e remover o valor caso ele seja igual a 0, para não precisarmos nos preocupar com a quantidade de notas 0. Vamos tentar: 

notas = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 
for nota in notas: 
if nota == 0: 
        notas.remove(nota) 
print(notas) 

E o resultado: 

[0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5]


Ué! De novo sobrou um 0! Por quê, dessa vez? Nesse caso, o que houve foi uma confusão entre o laço for e o método remove()

O for itera sobre os elementos de uma lista por meio do índice - ou seja, ele começa com o elemento na posição 0, passa pro elemento na posição 1 e assim por diante, até que o índice (a posição) atinja o comprimento da lista. 

O método remove(), por sua vez, ao apagar um elemento, realoca os outros dentro da lista para que não haja um espaço vazio no lugar onde havia o elemento removido. Quando removemos um elemento da lista, a lista realmente diminui de tamanho! 

Sabendo disso, vamos fazer uma simulação passo a passo para tentar entender o que aconteceu: 

Primeira iteração: índice = 0, lista = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 

Segunda iteração: índice = 1, lista = [0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 

Note que o segundo 0 foi ignorado pelo for! Quando o for chegou ao índice 1, onde estava esse `0` inicialmente, o 0 já havia sido realocado para o índice 0, resultando nesse problema. 

Por isso, devemos sempre lembrar que é recomendável nunca alterar uma lista enquanto se itera sobre ela! 

Precisamos de uma forma melhor de remover todas as ocorrências de um mesmo valor em uma lista. 

Como filtrar e criar listas em Python usando compreensão de listas 

Já conhecemos uma técnica no Python chamada de compreensão de lista. Como podemos usá-la para resolver nosso problema? Queremos uma lista com todos os valores da nossa lista de notas, contanto que o valor seja maior que 0

Vamos lá, então: 

notas = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 
notas_validas = [nota for nota in notas if nota > 0] 
print(notas_validas)

E agora sim: 

[9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 

Enfim, basta recalcularmos a média com essa nova lista de notas: 

media_valida = sum(notas_validas) / len(notas_validas) 
print(media_valida)

Dessa vez, uma média melhor para os alunos: 

7.538461538461538 

Após a média ser calculada e arredondada para 7.5, a professora quis conferir se seu método de avaliação tinha sido efetivo - isto é, se a nota da sala realmente representava como os alunos tinham se saído na prova. 

Para isso, ela precisava calcular quantos alunos tiraram a nota na média, com uma margem de diferença de 0.5 (ou seja, quantos alunos tiraram uma nota entre 7 e 8). 

Como contar elementos dentro de uma lista em Python 

Para contar quantas vezes um elemento aparece numa lista, podemos usar o método count() dessa forma: 

qtd_de_setes = notas.count(7.0) 
print(qtd_de_setes)

E o resultado: 

3

Para de fato fazermos o que queremos, precisamos usar o método com três valores - 7, 7.5 e 8

qtd_alunos_na_media = notas.count(7.0) + notas.count(7.5) + notas.count(8.0) 
print(qtd_alunos_na_media)

O resultado: 

8

Nesse caso, a solução usando count() funciona bem, pois sabemos que queremos apenas esses três valores (7.0, 7.5 e 8.0). 

Mas se a lista tivesse valores como 7.1, 7.2... até 8.0, precisaríamos fazer um count() para cada valor? Isso tornaria o processo trabalhoso e pouco eficiente. 

Uma outra abordagem que poderia ser utilizada, que evitaria o problema de haver mais valores no intervalo que queremos contar, seria utilizar um laço for e armazenar o valor da contagem em uma variável, dessa forma: 

notas = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 
qtd_alunos_na_media = 0 
for nota in notas: 
if 7.0 <= nota <= 8.0: 
        qtd_alunos_na_media += 1 
print(qtd_alunos_na_media)

Temos o mesmo resultado: 

Juntando o que aprendemos do método sum() e de compreensão de lista, e sabendo que no Python a classe bool, que representa os tipos booleanos, herda da classe int (True é igual a 1 e False é igual a 0), podemos até fazer isso de uma forma bem mais sucinta: 

Dica de performance: para listas muito grandes, você pode usar uma generator expression (trocando [] por () ou removendo os colchetes) para economizar memória: 

qtd_alunos_na_media = sum(7.0 <= nota <= 8.0 for nota in notas)
 
notas = [0, 0, 9.0, 8.0, 5.0, 10.0, 7.0, 7.5, 4.0, 10.0, 7.0, 7.0, 8.0, 8.0, 7.5] 
qtd_alunos_na_media = sum([7.0 <= nota <= 8.0 for nota in notas]) 
print(qtd_alunos_na_media)

Temos o mesmo resultado: 

Principais operações com listas em Python: resumo 

Neste artigo, exploramos a utilidade das listas em Python, quando utilizá-las e quais operações básicas podemos realizar. 

Ao longo deste artigo, vimos como somar elementos de uma lista Python usando sum(), como fazer soma em Python, como contar elementos ou saber o tamanho de uma lista Python, como remover itens de listas, como calcular média e até como criar listas de acordo com sua necessidade.

Com essas técnicas de operações básicas com listas em Python, seu código fica mais prático e eficiente. 

Veja também: aprofundando em listas Python 

Quer aprender mais sobre listas em Python? Dê uma olhada nos nossos outros posts no blog sobre o assunto e aprenda mais sobre adicionar elementos a uma lista, ordenar uma lista e até conheça a funcionalidade da compreensão de lista

Além disso, pode ser legal dar uma lida na documentação das listas no Python, para conhecer mais possibilidades no tratamento delas. 

Outro assunto muito interessante é como trabalhar com dicionários em Python

Gostou do conteúdo? Está mais confiante para usar listas no Python, agora? Que tal aprender um pouco mais? Confira nossa formação Python para web e continue estudando! 

Avalie este artigo 

✨ Agradecemos pela sua avaliação! ✨ 

Avalie este artigo

Veja outros artigos sobre Programação