使用lambda

时间:2017-05-17 15:27:37

标签: python lambda

我正在尝试编写一个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编写什么样的功能?

1 个答案:

答案 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])

会给你相同的结果