查找列表中2个连续元素的期望

时间:2015-03-30 16:00:42

标签: python python-2.7 binomial-theorem

我有

mylist = [a, b, c, d] 

我希望得到:

[p*a+(1-p)*b, p*b+(1-p)*c, p*c+(1-p)*d]

现在我正在做的是:

somelist = []   
for i in range(len(mylist)):
    if i+1<len(mylist):
        expectedVal = (1-p)*mylist[i]+p*mylist[i+1]
        somelist.append(expectedVal)

是否有一种更聪明的方法可以避免索引#34;循环进行最后一次迭代时的异常?

2 个答案:

答案 0 :(得分:2)

您可以使用将停在最短列表中的zip:

for v1, v2 in zip(mylist, mylist[1:]):
    somelist.append((1-p)*v1+p*v2)

你可以把它变成列表理解:

somelist = [(1-p)*v1 + p*v2 for v1, v2 in zip(mylist, mylist[1:])]

答案 1 :(得分:0)

在我看来,对代码进行最简单的修改就是迭代最多一个mylist的长度:

for i in range(len(mylist)-1):
    expectedVal = (1-p)*mylist[i]+p*mylist[i+1]
    somelist.append(expectedVal)