2012-03-17 12 views
8

Sto facendo i miei compiti e mi chiede di usare le funzioni sum() e len() per trovare la media di una lista di numeri di input, quando ho provato a usare sum() per ottenere la somma della lista, ho ottenuto un errore TypeError: tipi di operando non supportati per +: 'int' e 'str'. Segue il mio codice:Come posso usare la funzione sum() per un elenco in Python?

numlist = input("Enter a list of number separated by commas: ") 

numlist = numlist.split(",") 

s = sum(numlist) 
l = len(numlist) 
m = float(s/l) 
print("mean:",m) 
+1

ciò che è stato il tuo contributo? – franka

+2

's = sum (map (int, numlist))' – cji

risposta

9

Il problema è che si dispone di un elenco di stringhe. È necessario convertirli in numeri interi prima di calcolare la somma. Per esempio:

numlist = numlist.split(",") 
numlist = map(int, numlist) 
s = sum(numlist) 
... 
13

Il problema è che quando si legge dall'ingresso, si dispone di una lista di stringhe. Si potrebbe fare qualcosa di simile, come la seconda linea:

numlist = [float(x) for x in numlist] 
0

Spalato si restituisce un array di stringhe, quindi è necessario convertire questi numeri interi prima di utilizzare la funzione di somma.

3

Si stanno sommando stringhe, non numeri, che è ciò che sta dicendo il messaggio di errore.

Converti ogni stringa nella sua rispettiva intero:

numlist = map(int, numlist) 

E poi prendere la media (notare che io uso float() diversamente da voi):

arithmetic_mean = float(sum(numlist))/len(numlist) 

Si desidera utilizzare float() prima di dividere , come float(1/2) = float(0) = 0.0, che non è quello che vuoi.

Un'alternativa potrebbe essere quella di fare solo tutti float in primo luogo:

numlist = map(float, numlist) 
+0

A meno che l'OP non sia in Py3, nel qual caso la vera divisione è l'impostazione predefinita. – lvc

+0

Hmm, potrebbe anche essere il caso. – Blender

0

si può provare questo.

reduce(lambda x,y:x+y, [float(x) for x in distance]) 
0

Convertire la stringa di input in un elenco di valori float. Ecco il codice aggiornato.

numlist = list(map(int,input("Enter a list of number separated by commas: ").split(','))) 
l = len(numlist) 
s = sum(numlist) 
print("mean :",s/l) 
0

Per Python 2,7

numlist = map(int,raw_input().split(",")) 
s = sum(numlist) 
l = len(numlist) 
m = float(s/l) 
print("mean:"+ str(m)) 
Problemi correlati