列表中组合的乘积之和

bla*_*ned 7 python functional-programming python-3.x

在给定列表中对所有组合的乘积求和的Pythonic方法是什么,例如:

[1, 2, 3, 4]
--> (1 * 2) + (1 * 3) + (1 * 4) + (2 * 3) + (2 * 4) + (3 * 4) = 35
Run Code Online (Sandbox Code Playgroud)

(对于这个例子,我已经采用了所有的两元素组合,但它可能有所不同.)

Avi*_*Raj 10

使用 itertools.combinations

>>> l = [1, 2, 3, 4]
>>> sum([i*j for i,j in list(itertools.combinations(l, 2))])
35
Run Code Online (Sandbox Code Playgroud)


Kev*_*uan 7

>>> a = [1, 2, 3, 4]    
>>> import operator
>>> import itertools
>>> sum(itertools.starmap(operator.mul, itertools.combinations(l, 2)))
35
Run Code Online (Sandbox Code Playgroud)

itertools.combinations(a, 2) 收益:

>>> list(itertools.combinations(a, 2))
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
>>> 
Run Code Online (Sandbox Code Playgroud)

并且itertools.starmap():

创建一个迭代器,使用从iterable中获取的参数来计算函数.使用而不是map()在参数参数已经从单个可迭代的元组中分组时(数据已经"预先压缩").

最后,使用sum() 一个发电机的理解,以获得最终结果.