Sumar una lista de números en Python [duplicado]
Dada una lista de números como:
[1, 2, 3, 4, 5, ...]
¿Cómo calculo su suma total?
1 + 2 + 3 + 4 + 5 + ...
¿Cómo calculo sus promedios por pares?
[(1+2)/2, (2+3)/2, (3+4)/2, (4+5)/2, ...]
Pregunta 1:
Para sumar una lista de números, use sum
:
xs = [1, 2, 3, 4, 5]
print(sum(xs))
Esto produce:
15
Pregunta 2:
Entonces quieres (elemento 0 + elemento 1)/2, (elemento 1 + elemento 2)/2, ... etc.
Hacemos dos listas: una de cada elemento excepto el primero y otra de cada elemento excepto el último. Entonces los promedios que queremos son los promedios de cada par tomados de las dos listas. Solemos zip
tomar pares de dos listas.
Supongo que desea ver decimales en el resultado, aunque los valores de entrada sean números enteros. De forma predeterminada, Python realiza la división de enteros: descarta el resto. Para dividir las cosas por completo, necesitamos usar números de punto flotante. Afortunadamente, dividir un int por un float producirá un float, por lo que simplemente lo usamos 2.0
para nuestro divisor en lugar de 2
.
De este modo:
averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]
Para resumir una lista de números:
sum(list_of_nums)
Genere una nueva lista con elementos adyacentes promediados xs
usando una lista por comprensión :
[(x + y) / 2 for x, y in zip(xs, xs[1:])]
Sume todos esos elementos adyacentes en un solo valor:
sum((x + y) / 2 for x, y in zip(xs, xs[1:]))
Pregunta 2: Para sumar una lista de números enteros:
a = [2, 3, 5, 8]
sum(a)
# 18
# or you can do:
sum(i for i in a)
# 18
Si la lista contiene números enteros como cadenas:
a = ['5', '6']
# import Decimal: from decimal import Decimal
sum(Decimal(i) for i in a)