首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表中的元素添加到Python相应列表中的条件上

将列表中的元素添加到Python相应列表中的条件上
EN

Stack Overflow用户
提问于 2014-06-16 17:21:19
回答 2查看 15.8K关注 0票数 3

我有三份名单

代码语言:javascript
复制
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]。我尝试使用以下代码

代码语言:javascript
复制
total_crf = crf[vr_bin <= vr].sum()

但是我得到了下面的错误,AttributeError: 'float' object has no attribute 'sum',请建议解决这个问题的方法。谢谢你

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-16 17:28:47

sum是一个函数,而不是一个方法,但更大的问题是,您试图使用的crf[vr_bin <= vr]表示法并不能像您认为的那样在Python中实现。相反,您必须在漫长的过程中迭代这些列表,并在进行总结时进行总结。(幸运的是,您可以同时在vr_bincrf上迭代zip。)

代码语言:javascript
复制
result = 0
for (v, c) in zip(vr_bin, crf):
    if v <= vr[0]:
        result += c
    else:
        break
票数 3
EN

Stack Overflow用户

发布于 2014-06-16 17:33:48

因为sum()是一个函数,而不是一个方法,所以您会得到这个错误:

代码语言:javascript
复制
>>> 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'
>>> 

下面是工作的代码:

代码语言:javascript
复制
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)

它的运作方式是:

代码语言:javascript
复制
>>> 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
>>> 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24248942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档