0

我有

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)

当循环进行最后一次迭代时,是否有更聪明的方法来避免“超出索引”异常?

4

2 回答 2

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:])]
于 2015-03-30T16:03:30.827 回答
0

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

for i in range(len(mylist)-1):
    expectedVal = (1-p)*mylist[i]+p*mylist[i+1]
    somelist.append(expectedVal)
于 2015-03-30T16:18:13.090 回答