Python One line循环两个函数

时间:2017-04-03 21:18:57

标签: python-2.7 for-loop

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

    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 个答案:

答案 0 :(得分:0)

您可以在某个容器中保留ytuple是这里的自然选择):

>>> 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与生成器表达式中的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