He tenido problemas para calcular el promedio de los valores en 2 listas diferentes. Esto es lo que he estado haciendo (como novato en Python):

Averagelist = []
Listofvalues1 = ['1', '2', '3', '4']
Listofvalues2 = ['5', '6', '7', '8']

for i, x in enumerate(Listofvalues1):
    for j, y in enumerate(Listofvalues2):
        if j == i:
            AVGvalue = (int(x)+int(y)/2)
            Averagelist.append(AVGvalue)

He inventado este camino solo. Puede ser inútil, pero hasta ahora puedo imprimir los dos valores que quiero usar para el cálculo, pero recibo un error "ValueError: literal no válido para int () con base 10: 'somevalue'". ¿Podría ser el signo ''?

¡Salud!

-1
user3223818 1 sep. 2014 a las 17:34

4 respuestas

La mejor respuesta

Para calcular el promedio real sin redondearlo hacia abajo, use float. También necesitabas un par adicional de paréntesis; de lo contrario, sería y / 2 en lugar de (x + y / 2).

En cuanto a ese error, no estoy seguro de lo que está usando en sus listas Listofvalues como entrada, lo siguiente funcionó bien para mí.

Averagelist = []
Listofvalues1 = [1,2]
Listofvalues2 = [6,7]

for i, x in enumerate(Listofvalues1):
    for j, y in enumerate(Listofvalues2):
        if j == i:
            AVGvalue = ((float(x)+float(y))/2)
            Averagelist.append(AVGvalue)

print Averagelist
1
Jakob 1 sep. 2014 a las 13:46

¿Quiso decir (int (x) + int (y)) / 2 en lugar de (int (x) + int (y) / 2)?

0
hbere 1 sep. 2014 a las 13:39

¿Necesita que sus datos se almacenen como cadenas? Tendrás que convertirlos en números (flotantes) al mismo tiempo. Esto se puede hacer sin un bucle for, utilizando la comprensión de la lista:

Listofvalues1 = ['1', '2', '3', '4']
Listofvalues2 = ['5', '6', '7', '8']
Averagelist = [(float(v1)+float(v2))/2 for (v1, v2) in zip(Listofvalues1, Listofvalues2)]
2
Nras 1 sep. 2014 a las 13:48

Puedes probar:

averages = [(float(e[0]) + float(e[1]))/2 for e in zip(Listofvalues1, Listofvalues2)]
0
Sebastian 1 sep. 2014 a las 15:19