2017-04-03 112 views
0

我目前在Python中运行下面的代码。我需要知道的是如何将y的值存储在行V=max(u(j) + y for y in set2)中。该行获得set1和set2的每个值的最大总和。换句话说,对于代码的第一次迭代,最大值为3(set1为1,set2为2),那么我想将数字2存储在某处。Python一行循环两个函数

set1=[1,2,3] 
    set2=[1,2]  
    u=lambda c: c**(1) 
    for j in set1: 
     V=max(u(j) + y for y in set2) 
     print (V) 
    else: 
     V=0 

我知道一个解决方案是做一个额外的循环,我宁愿做一行。

问候,

+1

...您的预期输出是什么?请不要使用'lambda'。如果你要*命名你的匿名函数*,那么你*不应该使用匿名函数语法*而只是使用正常的函数定义。 –

+0

感谢您的建议!当前输出是3,4,5,它是set1和set2中每个元素的最大总和。我想得到一个元组(3,2,1),(4,2,2),(5,2,3)。包括构成该总和的总和和每个元素。 –

回答

0

你可以保持y沿着一些容器(tuple是自然选择在这里):

>>> set1 = [1,2,3] 
>>> set2 = [1,2] 
>>> def u(c): return c**(1) 
... 
>>> for j in set1: 
...  V, y = max((u(j) + y, y) for y in set2) 
...  print(V, y) 
... 
3 2 
4 2 
5 2 

顺便说一句,我不知道你的else从句是假设但我希望你知道它始终执行,因此V将始终为0.

另外,请注意,作业左侧的y与没有任何关系在生成器表达式中,它有它自己的作用域。我可以轻松地将它称为任何我想要的:

>>> for j in set1: 
...  V, fish = max((u(j) + y, y) for y in set2) 
...  print(V, fish) 
... 
3 2 
4 2 
5 2