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.
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)