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

Finding the expectation of 2 consecutive elements in a list

我有

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)

有没有更聪明的方法来避免在循环进行最后一次迭代时出现 "out of index" 异常?

您可以使用 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:])]

在我看来,对您的代码最简单的修改是迭代到比 mylist 的长度少一:

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