web-dev-qa-db-fra.com

Comment utiliser la fonction sum () pour une liste en Python?

Je fais mes devoirs et il me faut utiliser une fonction sum () et une fonction len () pour trouver la moyenne d'une liste de nombres en entrée. Lorsque j'ai essayé d'utiliser sum () pour obtenir la somme de la liste, une erreur s'est produite. TypeError: type (s) d'opérande non pris en charge pour +: 'int' et 'str'. Voici mon code:

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)
8
user1275189

Le problème est que lorsque vous lisez à partir de l'entrée, vous avez une liste de chaînes. Vous pouvez faire quelque chose comme ça comme deuxième ligne:

numlist = [float(x) for x in numlist]
13
Zenon

Le problème est que vous avez une liste de chaînes. Vous devez les convertir en nombres entiers avant de calculer la somme. Par exemple:

numlist = numlist.split(",")
numlist = map(int, numlist)
s = sum(numlist)
...
10
Justin Ethier

Vous ajoutez des chaînes, pas des chiffres, ce que dit votre message d'erreur.

Convertir chaque chaîne en son entier respectif:

numlist = map(int, numlist)

Et ensuite, prenez la moyenne (notez que j'utilise float() différemment que vous):

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

Vous voulez utiliser float() avant de diviser, en tant que float(1/2) = float(0) = 0.0, ce qui n'est pas ce que vous voulez.

Une alternative serait de simplement les rendre tous float en premier lieu:

numlist = map(float, numlist)
4
Blender

Convertissez l'entrée de chaîne en liste de valeurs flottantes. Voici le code mis à jour.

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
fireblaze

Split vous renvoie un tableau de chaînes. Vous devez donc les convertir en nombres entiers avant d'utiliser la fonction sum.

0
franka

Pour Python 2.7 

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

Vous pouvez essayer ça.

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