在给定列表中对所有组合的乘积求和的Pythonic方法是什么,例如:
[1, 2, 3, 4] --> (1 * 2) + (1 * 3) + (1 * 4) + (2 * 3) + (2 * 4) + (3 * 4) = 35
(对于这个例子,我已经采用了所有的两元素组合,但它可能有所不同.)
使用 itertools.combinations
>>> l = [1, 2, 3, 4] >>> sum([i*j for i,j in list(itertools.combinations(l, 2))]) 35
>>> a = [1, 2, 3, 4] >>> import operator >>> import itertools >>> sum(itertools.starmap(operator.mul, itertools.combinations(l, 2))) 35
itertools.combinations(a, 2)
收益:
>>> list(itertools.combinations(a, 2)) [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] >>>
并且itertools.starmap()
:
创建一个迭代器,使用从iterable中获取的参数来计算函数.使用而不是
map()
在参数参数已经从单个可迭代的元组中分组时(数据已经"预先压缩").
最后,使用sum()
一个发电机的理解,以获得最终结果.