我有三个列表
vr=[5, 10, 15, 20, 25]
vr_bin = [1,2,3,4,5,6,7,8,9,10]
crf= [0.0357, 0.7124, 0.1707, 0.0142, 0.0328, 0.0291, 0.0244, 0.0206, 0.0334, 1.7124]
其中 vr_bin 和 crf 的长度相同。我必须取 vr 的第一个值(例如5)并将其与 vr_bin (其值为i
,vr_bin[i] <= vr[0]
)进行比较然后总和 crf 最多crf[i]
。
在我们的示例中,最多vr_bin[4]
将满足我们的条件(因为vr_bin[4]
是5
而vr[0]
是5
)。所以我想计算crf[0]+crf[1]+crf[2]+crf[3]+crf[4]
。我尝试使用以下代码
total_crf = crf[vr_bin <= vr].sum()
但我收到以下错误AttributeError: 'float' object has no attribute 'sum'
请提出解决此问题的方法。三江源
答案 0 :(得分:2)
sum
是一个函数,而不是一种方法,但更大的问题是,您尝试使用的crf[vr_bin <= vr]
符号并不能完成您在Python中所做的操作。相反,你必须在很长的路上遍历列表,总结一下。 (幸运的是,您可以使用zip
同时迭代vr_bin
和crf
。)
result = 0
for (v, c) in zip(vr_bin, crf):
if v <= vr[0]:
result += c
else:
break
答案 1 :(得分:2)
您收到该错误是因为sum()
是一个函数,而不是一个方法:
>>> x = [1, 2]
>>> sum(x)
3
>>> x.sum() #Error
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'sum'
>>>
以下是有效的代码:
ind = [i for i in range(len(vr_bin)) if vr_bin[i] <= vr[0]]
round(sum(crf[i] for i in range(max(ind)+1)), 3)
运行方式:
>>> vr=[5, 10, 15, 20, 25]
>>> vr_bin = [1,2,3,4,5,6,7,8,9,10]
>>> crf= [0.0357, 0.7124, 0.1707, 0.0142, 0.0328, 0.0291, 0.0244, 0.0206, 0.0334, 1.7124]
>>> ind = [i for i in range(len(vr_bin)) if vr_bin[i] <= vr[0]]
>>> round(sum(crf[i] for i in range(max(ind)+1)), 3)
0.933
>>>