在Python的相应列表中的条件中添加列表中的元素

时间:2014-06-16 17:21:19

标签: python list python-2.7

我有三个列表

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 (其值为ivr_bin[i] <= vr[0])进行比较然后总和 crf 最多crf[i]

在我们的示例中,最多vr_bin[4]将满足我们的条件(因为vr_bin[4]5vr[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'请提出解决此问题的方法。三江源

2 个答案:

答案 0 :(得分:2)

sum是一个函数,而不是一种方法,但更大的问题是,您尝试使用的crf[vr_bin <= vr]符号并不能完成您在Python中所做的操作。相反,你必须在很长的路上遍历列表,总结一下。 (幸运的是,您可以使用zip同时迭代vr_bincrf。)

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
>>>