首先,您好,我有一个小问题。我试图学习如何使用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)
我知道这条线不起作用我只是想说明我在问什么
答案 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])]