列表和lambda表达式

时间:2016-06-15 18:17:15

标签: python

首先,您好,我有一个小问题。我试图学习如何使用lambda表达式等等......我有一些代码,这是我需要复制的一个例子。

>>>something (lambda x:x+1, lambda y:y+10, [1, 2, 3, 4])
[2, 12, 4, 14]

我需要那个输出,到目前为止我得到了这个:

l = [1,2,3,4]
def result(l):
    o = l[0::2]
    o2 = l[1::2]
    p = map(lambda x:x+1,o)
    p2 = map(lambda y:y+10,o2)
    return p,p2

首先,我知道我会返回2个单独的列表,我试图找出那个列表。

如果没有p和p2分开,有没有办法做到这一点? 像这样:

p = map(lambda x,y: x+1 x+10, o,o2) 

我知道这条线不起作用我只是想说明我在问什么

3 个答案:

答案 0 :(得分:1)

您错误地使用了这些lambda函数。为什么使用多个lambda函数来处理一个简单的列表?您只能使用一个列表解析:

r = [1, 2, 3, 4]
func = lambda x: [v+1 if i%2==0 else v+10 for i,v in enumerate(x)]
func(r)
# [2, 12, 4, 14]

为了便于阅读,您甚至可能更喜欢为此编写正确的函数。

或者更好的是,你甚至可以完全没有lambda函数:

[v+1 if i%2 == 0 else v+10 for i,v in enumerate(x)]

答案 1 :(得分:0)

假设每个lambda表达式都用于something的第三个参数的每个第二个值,你可以简单地覆盖列表(或者换一个新的):

def something(f1,f2,lst):
    for i,li in enumerate(lst):
        if not i%2: 
            lst[i] = f1(li)
        else:  
            lst[i] = f2(li)
    return lst

something (lambda x:x+1, lambda y:y+10, [1, 2, 3, 4])
#[2, 12, 4, 14]

这绝不是优化的,但它是可读的。

答案 2 :(得分:0)

其他答案可行,但如果您的问题只是一个案例,您需要循环几个函数以应用于列表的不同元素,然后重复这些函数 - 然后,语义上,{{1的组合}和zip将是一个很好的方法:

itertools.cycle

输出:

from itertools import cycle
[f(n) for f, n in zip(cycle((lambda x: x + 1, lambda x: x + 10)), [1, 2, 3, 4])]