2011-10-04 73 views
5

什么是map两个参数的优雅方法lambda函数为一个值列表,其中第一个参数是常量,第二个参数是listmap lambda x,y with constant x

实施例:

lambda x,y: x+y 
x='a' 
y=['2','4','8','16'] 

预期的结果:

['a2','a4','a8','a16'] 

注:

  • 这只是一个例子,实际lambda函数是更复杂
  • 假设一世不能使用列表理解

回答

15

您可以使用itertools.starmap

a = itertools.starmap(lambda x,y: x+y, zip(itertools.repeat(x), y)) 
a = list(a) 

,你会得到你想要的输出。

BTW,既itertools.imap和Python3的map将接受如下:

itertools.imap(lambda x,y: x+y, itertools.repeat(x), y) 

默认Python2的map不会在y末停止,将插入None小号...


但理解是更好

[x + num for num in y] 
+1

+1用于提示pythonic列表理解而不是总体ol映射函数(= - 虽然我刚注意到提问者状态“假设我不能使用列表理解” –

10

的Python 2.x的

from itertools import repeat 

map(lambda (x, y): x + y, zip(repeat(x), y)) 

Python 3.x都有

map(lambda xy: ''.join(xy), zip(repeat(x), y)) 
+0

只是意识到它不会工作Python 3 ... – JBernardo

+0

@JBernardo,他们是否将'在签名中解压缩'走了?我似乎记得沿着这些线。 –

+0

是的,这就是为什么我在我的答案上建议'starmap'。 – JBernardo

5
def prependConstant(x, y): 
    return map(lambda yel: x + yel, y) 
9

你也可以使用封此

x='a' 
f = lambda y: x+y 
map(f, ['1', '2', '3', '4', '5']) 
>>> ['a1', 'a2', 'a3', 'a4', 'a5'] 
4
['a' + x for x in y] 

,或者如果你真的需要一个调用的:

def f(x, y): 
    return x + y 

[f('a', x) for x in y] 
2

你有使用拉姆达?

>>> x='a' 
>>> y=['2','4','8','16'] 
>>> map(x.__add__, y) 
['a2', 'a4', 'a8', 'a16'] 
>>> 
-1

顺便说一句,既itertools.imap和Python3的地图将接受如下:

itertools.imap(拉姆达X,Y:X + Y,itertools.repeat(X)中,y) 默认的Python2地图不会停止在y的末尾,并会插入Nones ...

我只是想添加到这个答案是在Python 2.x中,你可以像

map(lambda x,y: x+y, itertools.repeat(x, len(y))) 

有所收获itertools停止迭代。

相关问题