我有
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;循环进行最后一次迭代时的异常?
答案 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)