蟒蛇;有条件的多个两个列表

时间:2017-10-18 09:29:42

标签: python numpy

我需要在条件语句中将两个列表相乘,这是我的基本数据的一个示例:

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

1 个答案:

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