我有一组像这样的值
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来解决这个问题。
答案 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)
好吧,假设您设置了变量min
和max
。然后你可以输入:
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))