给定一个数字列表,例如:
[1, 2, 3, 4, 5, ...]
我如何计算它们的总和:
1 + 2 + 3 + 4 + 5 + ...
我如何计算他们的两两平均值:
[(1+2)/2, (2+3)/2, (3+4)/2, (4+5)/2, ...]
给定一个数字列表,例如:
[1, 2, 3, 4, 5, ...]
我如何计算它们的总和:
1 + 2 + 3 + 4 + 5 + ...
我如何计算他们的两两平均值:
[(1+2)/2, (2+3)/2, (3+4)/2, (4+5)/2, ...]
当前回答
你可以试试这种方法:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sm = sum(a[0:len(a)]) # Sum of 'a' from 0 index to 9 index. sum(a) == sum(a[0:len(a)]
print(sm) # Python 3
print sm # Python 2
其他回答
我只使用带有map()的
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
你也可以使用递归来做同样的事情:
Python代码片段:
def sumOfArray(arr, startIndex):
size = len(arr)
if size == startIndex: # To Check empty list
return 0
elif startIndex == (size - 1): # To Check Last Value
return arr[startIndex]
else:
return arr[startIndex] + sumOfArray(arr, startIndex + 1)
print(sumOfArray([1,2,3,4,5], 0))
这么多解决方案,但我最喜欢的还是没有:
>>> import numpy as np
>>> arr = np.array([1,2,3,4,5])
numpy数组与列表没有太大区别(在这个用例中),除了你可以像对待数字一样对待数组:
>>> ( arr[:-1] + arr[1:] ) / 2.0
[ 1.5 2.5 3.5 4.5]
完成了!
解释
花式索引的意思是:[1:]包括从1到最后的所有元素(因此省略了元素0),而[:-1]是除了最后一个以外的所有元素:
>>> arr[:-1]
array([1, 2, 3, 4])
>>> arr[1:]
array([2, 3, 4, 5])
将这两个元素相加,就得到了一个包含元素(1+2)(2+3)等的数组。 请注意,我是除以2.0,而不是2,因为否则Python认为您只使用整数并产生四舍五入的整数结果。
使用numpy的优点
Numpy比围绕数字列表的循环要快得多。这取决于你的列表有多大,快几个数量级。此外,它的代码更少,至少对我来说,它更容易阅读。 我正在努力养成对所有数字组都使用numpy的习惯,这对于我本来必须编写的所有循环和循环中的循环是一个巨大的改进。
试试以下方法:
mylist = [1, 2, 3, 4]
def add(mylist):
total = 0
for i in mylist:
total += i
return total
result = add(mylist)
print("sum = ", result)
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)