查找列表中 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)
我有
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)