J'ai une liste de nombres tels que [1,2,3,4,5...]
, et je veux calculer (1+2)/2
et pour le second, (2+3)/2
et le troisième,
(3+4)/2
, et ainsi de suite. Comment puis-je faire cela ?
Je voudrais additionner le premier nombre avec le deuxième et le diviser par 2, puis additionner le deuxième avec le troisième et diviser par 2, et ainsi de suite.
De même, comment puis-je additionner une liste de nombres ?
a = [1, 2, 3, 4, 5, ...]
C'est ça :
b = sum(a)
print b
pour obtenir un numéro ?
Cela ne fonctionne pas pour moi.
Question 1 : Vous voulez donc (élément 0 + élément 1) / 2, (élément 1 + élément 2) / 2, ... etc.
Nous faisons deux listes : une de chaque élément sauf le premier, et une de chaque élément sauf le dernier. Ensuite, les moyennes que nous voulons sont les moyennes de chaque paire prises dans les deux listes. Nous utilisons zip
pour prendre les paires de deux listes.
Je suppose que vous voulez voir des décimales dans le résultat, même si vos valeurs d'entrée sont des entiers. Par défaut, Python effectue une division entière : il rejette le reste. Pour effectuer une division complète, nous devons utiliser des nombres à virgule flottante. Heureusement, diviser un int par un float produira un float, donc nous utilisons simplement 2.0
pour notre diviseur au lieu de 2
.
Ainsi :
averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]
Question 2 :
Cette utilisation de sum
devrait fonctionner correctement. Ce qui suit fonctionne :
a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45
De plus, vous n'avez pas besoin d'assigner tout à une variable à chaque étape du processus. print sum(a)
fonctionne très bien.
Vous devrez être plus précis sur ce que vous avez écrit et sur ce qui ne fonctionne pas.
Liste d'addition de numéros :
sum(list_of_nums)
Calcul de la moitié de n et de n - 1 (si le modèle est correct), en utilisant une [liste de compréhension][1] :
[(x + (x - 1)) / 2 for x in list_of_nums]
Additionner des éléments adjacents, par exemple ((1 + 2) / 2) + ((2 + 3) / 2) + ... en utilisant [reduce][2] et [lambdas][3].
reduce(lambda x, y: (x + y) / 2, list_of_nums)
[1] : http://docs.python.org/release/2.7/tutorial/datastructures.html#list-comprehensions [2] : http://docs.python.org/release/2.7/tutorial/datastructures.html#functional-programming-tools [3] : http://docs.python.org/release/2.7/tutorial/controlflow.html#lambda-forms