Compreensão de lista em Python

Gostaria de compartilhar outra pequena dica sobre Python .
Estou fazendo a Lição Python da Code Academy (muito legal para começar com Python )
e , em uma lição específica, precisamos fazer um loop em uma lista para aplicar uma função em cada elemento e somar todo o resultado.

Eu passei usando o List Comprehensions .

Então aqui está um exemplo

score_A_B_1 = [[90.0, 97.0, 75.0, 92.0],[90.0, 97.0, 75.0, 92.0]]
score_A_B_2
= [[100.0, 92.0, 98.0, 100.0],[100.0, 92.0, 98.0, 100.0]]
score_A_B_3
= [[0.0, 87.0, 75.0, 22.0],[0.0, 87.0, 75.0, 22.0]]

scores
= [score_A_B_1,score_A_B_2,score_A_B_3]

# Return the average of the number in the list
def average(lst_of_numbers):
return float(sum(lst_of_numbers))/len(lst_of_numbers)

# Return a weighted average of all list passed as parameter
# The weight is calculate as 100% divided by the lenght of the list
# eg. if the lenght of score_A_B = 2 ==> 100 / 2 ==> 50
# but we need a percentage so
# 50 / 100 ==> 0.5
# the weight of each element will 0.5
def get_weighted_average(score_A_Bs):
weighted_average
= 0
for score_A_B in score_A_Bs:
weighted_average
+= average(score_A_B) * (100 / len(score_A_Bs)/100)

return weighted_average

# Return the average of the all list
def get_score_average(scores):
return average([get_weighted_average(score) for score in scores])


scores_average
= get_score_average(scores)
print(scores_average)

Você pode ver o resultado aqui

average([get_weighted_average(score) for score in scores])

A parte [get_weighted_average(score) for score in scores]é a compreensão da lista :

Eu poderia escrever assim:

score_average = []
for score in scores:
score_average
.append(get_weighted_average(score))

Então, com a compreensão de lista , fazemos um loop em uma lista, aplicamos uma função em cada elemento e retornamos todos os resultados em uma lista

Respostas relacionadas:

Achatar uma lista de listas em uma linha em Python