您可以通过使用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文档。

这样速度更快,并且占用的内存更少。当然,它不够简洁。

10-02 07:51