我正在尝试编写一个lambda函数,该函数接受一个列表,并返回一个列表,其中包含列表中的数字对与其索引详细信息的总和。
实施例
input: [4,5,1]
output: [(0,1,9),(0,2,5),(1,2,6)]
in the above example we do pairwise sum
1. (4,5) --> 9
2. (4,1) --> 5
3. (5,1) --> 6
嵌套循环解决方案
def sumpair(L):
result=[]
for i in range(len(L)):
for j in range(i+1, len(L)):
result.append((i,j,L[i]+L[j]))
return result
我知道如何使用嵌套for循环编写它,想知道是否可以使用lambda写这个,如果没有,我想了解我们可以使用lambda编写什么样的功能?
答案 0 :(得分:1)
Lambdas和for-loops不是互斥的。你可以在lambda中放一个列表理解并称之为一天:
compute = lambda L: [(i, j, L[i]+L[j]) for i,j in itertools.combinations(range(len(L)), 2)]
(不要忘记import itertools
)。然后你会得到
In [12]: compute([4,5,1])
Out[12]: [(0, 1, 9), (0, 2, 5), (1, 2, 6)]
另一方面,如果您不想创建新变量:
(lambda L: [(i, j, L[i]+L[j]) for i,j in itertools.combinations(range(len(L)), 2)])([4,5,1])
会给你相同的结果