Ho una lista di numeri come [1,2,3,4,5...]
, e voglio calcolare (1+2)/2
e per il secondo, (2+3)/2
e il terzo,
(3+4)/2
, e così via. Come posso farlo?
Vorrei sommare il primo numero con il secondo e dividerlo per 2, poi sommare il secondo con il terzo e dividere per 2, e così via.
Inoltre, come posso sommare una lista di numeri?
a = [1, 2, 3, 4, 5, ...]
Lo è:
b = sum(a)
print b
per ottenere un numero?
Questo non funziona per me.
Domanda 1: Quindi vuoi (elemento 0 + elemento 1) / 2, (elemento 1 + elemento 2) / 2, ... ecc.
Facciamo due liste: una di ogni elemento tranne il primo, e una di ogni elemento tranne l'ultimo. Poi le medie che vogliamo sono le medie di ogni coppia prese dalle due liste. Usiamo zip
per prendere le coppie da due liste.
Presumo che tu voglia vedere i decimali nel risultato, anche se i tuoi valori di input sono interi. Per default, Python fa la divisione per interi: scarta il resto. Per dividere le cose fino in fondo, abbiamo bisogno di usare numeri in virgola mobile. Fortunatamente, dividere un int per un float produrrà un float, quindi usiamo semplicemente 2.0
per il nostro divisore invece di 2
.
Quindi:
averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]
Domanda 2:
L'uso di sum
dovrebbe funzionare bene. Il seguente funziona:
a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45
Inoltre, non è necessario assegnare tutto ad una variabile ad ogni passo lungo il percorso. print sum(a)
funziona bene.
Dovrai essere più specifico su cosa hai scritto esattamente e su come non funziona.
Somma di numeri:
sum(list_of_nums)
Calcolando la metà di n e n - 1 (se ho il modello corretto), usando una list comprehension:
[(x + (x - 1)) / 2 for x in list_of_nums]
Somma di elementi adiacenti, ad esempio ((1 + 2) / 2) + ((2 + 3) / 2) + ... usando reduce e lambdas
reduce(lambda x, y: (x + y) / 2, list_of_nums)