我有一個數字列表,如[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
這對我不起做用。 數學
我只使用帶有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
>>> 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
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)
全部答案確實顯示了程序化和通常方法。 我建議採用針對您的狀況的數學方法。 對於長列表,它能夠更快。 它的工做原理是由於你的列表是一個最多爲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
使用簡單的list-comprehension
和sum
:
>> sum(i for i in range(x))/2. #if x = 10 the result will be 22.5