在Python中对数字列表求和
假设你有一串数字,比如:
[1, 2, 3, 4, 5, ...]
我该如何计算这些数字的总和呢:
1 + 2 + 3 + 4 + 5 + ...
我又该如何计算它们的成对平均值呢:
[(1+2)/2, (2+3)/2, (3+4)/2, (4+5)/2, ...]
26 个回答
79
问题 2: 要对一串整数进行求和:
a = [2, 3, 5, 8]
sum(a)
# 18
# or you can do:
sum(i for i in a)
# 18
如果这个列表里的整数是以字符串的形式存在:
a = ['5', '6']
# import Decimal: from decimal import Decimal
sum(Decimal(i) for i in a)
145
要对一组数字求和:
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:]))
368
问题 1:
要对一组数字求和,可以使用 sum
这个函数:
xs = [1, 2, 3, 4, 5]
print(sum(xs))
这会输出:
15
问题 2:
你想要的结果是 (第一个元素 + 第二个元素) / 2, (第二个元素 + 第三个元素) / 2,等等。
我们需要创建两个列表:一个包含除了第一个元素以外的所有元素,另一个包含除了最后一个元素以外的所有元素。然后,我们想要的平均值就是从这两个列表中每一对元素的平均值。我们可以用 zip
来把这两个列表中的元素配对。
我假设你希望结果中能看到小数,尽管你的输入值都是整数。默认情况下,Python 会进行整数除法,也就是会把余数去掉。为了得到精确的结果,我们需要使用浮点数。幸运的是,把一个整数除以一个浮点数会得到一个浮点数,所以我们可以用 2.0
作为除数,而不是 2
。
因此:
averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]