在Python中彙總一個數字列表

我有一個數字列表,如[1,2,3,4,5...] ,我想計算(1+2)/2和第二, (2+3)/2和第三, (3+4)/2 ,依此類推。 我怎樣才能作到這一點? app

我想將第一個數字與第二個數字相加併除以2,而後將第二個數字與第三個相加併除以2,依此類推。 函數

另外,我如何總結一個數字列表? spa

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

是嗎: code

b = sum(a)
print b

獲得一個號碼? input

這對我不起做用。 數學


#1樓

我只使用帶有map()的lambda io

a = [1,2,3,4,5,6,7,8,9,10]
b = map(lambda x, y: (x+y)/2.0, fib[:-1], fib[1:])
print b

#2樓

>>> a = range(10)
>>> sum(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> del sum
>>> sum(a)
45

彷佛已在代碼中定義了sum並覆蓋了默認函數。 因此我刪除了它,問題解決了。 ast


#3樓

n = int(input("Enter the length of array: "))
list1 = []
for i in range(n):
    list1.append(int(input("Enter numbers: ")))
print("User inputs are", list1)

list2 = []
for j in range(0, n-1):
    list2.append((list1[j]+list1[j+1])/2)
print("result = ", list2)

#4樓

全部答案確實顯示了程序化和通常方法。 我建議採用針對您的狀況的數學方法。 對於長列表,它能夠更快。 它的工做原理是由於你的列表是一個最多爲n的天然數列表: module

假設咱們有天然數1, 2, 3, ..., 10原理

>>> nat_seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

您能夠在列表中使用sum函數:

>>> print sum(nat_seq)
55

您還能夠使用公式n*(n+1)/2 ,其中n是列表中最後一個元素的值(此處爲: nat_seq[-1] ),所以您能夠避免迭代元素:

>>> print (nat_seq[-1]*(nat_seq[-1]+1))/2
55

要生成序列(1+2)/2, (2+3)/2, ..., (9+10)/2您能夠使用生成器和公式(2*k-1)/2. (注意點使值浮點)。 生成新列表時必須跳過第一個元素:

>>> new_seq = [(2*k-1)/2. for k in nat_seq[1:]]
>>> print new_seq
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]

在這裏,您也能夠使用該列表中的sum函數:

>>> print sum(new_seq)
49.5

但你也能夠使用公式(((n*2+1)/2)**2-1)/2 ,這樣你就能夠避免迭代元素:

>>> print (((new_seq[-1]*2+1)/2)**2-1)/2
49.5

#5樓

使用簡單的list-comprehensionsum

>> sum(i for i in range(x))/2. #if x = 10 the result will be 22.5
相關文章
相關標籤/搜索