如何将一定数量范围内的数字相加?

时间:2016-10-08 05:43:17

标签: python arrays numpy range

我有一组像这样的值

 nums = [2.5, 1, 9, 9.9, 1.6, 5.4, 3.2, 4.4, 4, 5.2, 5, 6]

是否有一种pythonic方法可以将此数组中的所有值相加到某个值之间?例如,如果我的范围是2.5-6,我希望得到2.5 + 5.4 + 3.2 + 4.4 + 4 + 5.2 + 5 + 6 = 35.7。我也愿意使用numpy来解决这个问题。

6 个答案:

答案 0 :(得分:6)

由于还没有人提供过numpy解决方案,所以你可以去:

>>> nums = np.array([2.5, 1, 9, 9.9, 1.6, 5.4, 3.2, 4.4, 4, 5.2, 5, 6])
>>> nums[(2.5 <= nums) & (nums <= 6)].sum()
35.700000000000003

虽然,我尝试了一些简单的测试,但我不确定速度会有多大好处。

答案 1 :(得分:2)

>>> nums = [2.5, 1, 9, 9.9, 1.6, 5.4, 3.2, 4.4, 4, 5.2, 5, 6]
>>> sum([n for n in nums if 2.5 <= n <= 6])
35.7
>>> 2.5 + 5.4 + 3.2 + 4.4 + 4 + 5.2 + 5 + 6
35.7

答案 2 :(得分:2)

也可以通过排序然后二等分来找到列表的切片来求和:

>>> nums = [2.5, 1, 9, 9.9, 1.6, 5.4, 3.2, 4.4, 4, 5.2, 5, 6]
>>> nums.sort()
>>> import bisect
>>> min = 2.5
>>> max = 6
>>> sum(nums[bisect.bisect_right(nums, min)-1:bisect.bisect_left(nums, max)+1])
35.7

答案 3 :(得分:1)

好吧,假设您设置了变量minmax。然后你可以输入:

min = 2.5
max = 6
sum = sum( i if i>=min and i<=max else 0 for i in nums )

电贺!

答案 4 :(得分:1)

使用masked_outside()

import numpy as np
nums = [2.5, 1, 9, 9.9, 1.6, 5.4, 3.2, 4.4, 4, 5.2, 5, 6]
np.ma.masked_outside(nums, 2.5, 6).sum()

答案 5 :(得分:0)

sum(filter(lambda x: x>=2.5 and x<=6,nums))