Soma uma lista de números em Python

Eu tenho uma lista de números como [1,2,3,4,5...], e quero calcular (1+2)/2 e para o segundo, (2+3)/2 e para o terceiro, (3+4)/2, e assim por diante. Como posso fazer isso?

Eu gostaria de somar o primeiro número com o segundo e dividi-lo por 2, depois somar o segundo com o terceiro e dividir por 2, e assim por diante.

Além disso, como posso somar uma lista de números?

a = [1, 2, 3, 4, 5, ...]

É isso:

b = sum(a)
print b

para conseguir um número?

Isto não'não funciona para mim.

Pergunta 1: Então você quer (elemento 0 + elemento 1) / 2, (elemento 1 + elemento 2) / 2, ... etc.

Fazemos duas listas: uma de cada elemento, exceto o primeiro, e uma de cada elemento, exceto o último. Depois as médias que queremos são as médias de cada par tiradas das duas listas. Utilizamos o `zip' para tirar pares de duas listas.

Presumo que você queira ver decimais no resultado, mesmo que seus valores de entrada sejam números inteiros. Por padrão, Python faz divisão inteira: ele descarta o resto. Para dividir as coisas por todo o caminho, precisamos de usar números de ponto flutuante. Felizmente, dividir uma int por uma float produzirá uma float, então nós apenas utilizamos 2.0 para o nosso divisor ao invés de 2.

Assim:

averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]

Pergunta 2:

Essa utilização de "soma" deve funcionar bem. Os seguintes trabalhos:

a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45

Além disso, você não'não precisa atribuir tudo a uma variável em cada etapa do caminho. A 'print sum(a)` funciona muito bem.

Você terá que ser mais específico sobre exatamente o que você escreveu e como é't funcionando.

Comentários (4)

Lista de números de soma:

sum(list_of_nums)

Calculando metade de n e n - 1 (se eu tiver o padrão correto), usando uma compreensão de lista:

[(x + (x - 1)) / 2 for x in list_of_nums]

Soma de elementos adjacentes, por exemplo ((1 + 2) / 2) + ((2 + 3) / 2) + ... usando reduzir e lambdas

reduce(lambda x, y: (x + y) / 2, list_of_nums)
Comentários (3)

Tente usar a compreensão de uma lista. Algo do género:

new_list = [(old_list[i] + old_list[i+1])/2 for i in range(len(old_list-1))]
Comentários (2)