我需要在条件语句中将两个列表相乘,这是我的基本数据的一个示例:
x = [0,1,2,3]
p = [0.125,0.375,0.375,0.125]
我已经将这笔钱用于两个列表的直接乘法:
sum([x*p for x,p in zip(x,p)])
我需要修改列表理解和,只在x< = 2时将项目相乘,但我仍然相对较新的Python,无法解决这个问题。
任何帮助都会很棒。
编辑: 这就是我试图从R复制的内容。
x<-c(0,1,2,3,4,5)
p<-c(0.18,0.39,0.24,0.14,0.03,0.01)
sum(p[x<=2])
答案 0 :(得分:2)
使用三元运算符:
>>> x = [0,1,2,3]
>>> p = [0.125,0.375,0.375,0.125]
>>> sum([x*p for x,p in zip(x,p)])
1.5
>>> sum([x*p if x <= 2 else 0 for x,p in zip(x,p)])
1.125
或使用:
sum([x*p for x,p in zip(x,p) if x <= 2])
按照SiHa的建议。
在您编辑之后,您似乎误解了R中发生的事情,您尝试复制的代码只是对值进行求和,而不是将值乘以第一个列表中的相应值:
sum([p for x,p in zip(x,p) if x <= 2])
或者,如果第一个列表总是只是索引(即0,1,2,...... len(p)-1
),这可以更简单:
>>> p = [0.18,0.39,0.24,0.14,0.03,0.01]
>>> sum(p[:3]) # 1 + i (Where i is your requirement, 2 in this case)
0.81