您可以通过使用map和/或reduce函数使它更具Python风格吗?它只是对每个连续的数字对的乘积求和。
topo = (14,10,6,7,23,6)
result = 0
for i in range(len(topo)-1):
result += topo[i]*topo[i+1]
最佳答案
这是我能想到的最好的方法:
import operator
sum(map(operator.mul, topo[:-1], topo[1:]))
编辑:我刚刚发现有一种更好的方法可以做到这一点:
import operator
import itertools
def pairwise(iterable):
a, b = itertools.tee(iterable)
next(b, None)
return a, b
def sum_products(l):
return sum(itertools.imap(operator.mul, *pairwise(l)))
成对功能归功于itertools文档。
这样速度更快,并且占用的内存更少。当然,它不够简洁。