给定一个数字列表,例如:
[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, ...]
当前回答
对一串数字求和:
sum(list_of_nums)
使用列表推导式生成一个新列表,其中相邻元素在xs中求平均值:
[(x + y) / 2 for x, y in zip(xs, xs[1:])]
将所有相邻元素求和为一个值:
sum((x + y) / 2 for x, y in zip(xs, xs[1:]))
其他回答
>>> 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似乎已经在代码的某个地方定义了,并且覆盖了默认函数。所以我删除了它,问题解决了。
你也可以使用递归来做同样的事情:
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))
所有的回答都显示了一种纲领性和一般性的方法。我建议用一种数学方法来解决你的问题。它可以更快,特别是对于长列表。它之所以有效,是因为你的列表是一个到n的自然数列表:
假设我们有自然数1,2,3,…10:
>>> nat_seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
你可以在列表中使用求和函数:
>>> 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
遍历列表中的元素并像这样更新总数:
def sum(a):
total = 0
index = 0
while index < len(a):
total = total + a[index]
index = index + 1
return total
让我们让初学者容易:-
global关键字将允许在主函数中分配全局变量消息,而不产生新的局部变量
message = "这是一个全局变量!" def main (): 全球信息 message = "This is a local" 打印(消息) main () #输出“这是一个本地”-从函数调用 打印(消息) #输出“This is a local”——从外部作用域
这个概念叫做影子
在Python中对数字列表求和
Nums = [1,2,3,4,5] Var = 0 def金额(): 对于nums中的num: 全局变量 Var = Var + num 打印(var) 如果__name__ == '__main__': 金额()
输出= 15