Python 用map函数传递参数

Python 用map函数传递参数,python,python-2.7,Python,Python 2.7,陈述 a = ['abc', 'efg', 'hij'] 我想去 a = ['abc!', 'efg!', 'hij!'] 但是显然,对于a:中的元素不使用,因为它不是cleaver,我想了解更多关于map函数以及它如何传递参数的信息 所以我尝试附加一个“!”添加到列表的所有元素。但在此之前,append是一种list方法,而不是str方法 b = map(list,a) # gives : a = [['a','b','c'],['d','e','f'],['h','i','j']] a

陈述

a = ['abc', 'efg', 'hij']
我想去

a = ['abc!', 'efg!', 'hij!']
但是显然,对于a:中的元素不使用
,因为它不是cleaver,我想了解更多关于
map
函数以及它如何传递参数的信息

所以我尝试附加一个
“!”添加到列表的所有元素。但在此之前,
append
是一种
list
方法,而不是
str
方法

b = map(list,a) # gives : a = [['a','b','c'],['d','e','f'],['h','i','j']]
a = map(list.append(['!']), b) 
最后一个map函数返回一个TypeError:

TypeError: append() takes exactly one argument (0 given)
我想知道是否可以将参数传递给
map
使用的方法。
谢谢

您可以使用以下代码获得预期结果:

a = ['abc', 'efg', 'hij']
map(lambda x: x + '!', a) # ['abc!', 'efg!', 'hij!']
的第一个参数是应用于第二个参数
iterable
上所有项目的函数。您不能直接将参数传递给给定给
map
的函数,但可以创建另一个传递参数的函数(或
lambda
),就像上面的示例一样

通常应优先于
map
,因为这样做更明显:

[x + '!' for x in a] # ['abc!', 'efg!', 'hij!']

map
接收两个参数,一个函数和一个列表

它为每个项调用一次函数,并将当前项作为参数

由于
map
返回的结果,将字符串转换为列表并附加到列表中可能不是最佳选择,但实际上可以使用
+
操作符将字符串附加到一起

您可以通过执行以下操作来实现您的目标:

map(lambda s: s + '!', a)  # => ['abc!', 'efg!', 'hij!']

lambda
只是函数的另一种语法,它的参数名为s,它返回
s+'!'

使用
列表理解

>>> a = ['abc', 'efg', 'hij']
>>> ["{}!".format(x) for x in a]
['abc!', 'efg!', 'hij!']
地图的工作原理

映射(函数、迭代器)

它一个接一个地接受元素,并将指定的函数应用于每个元素

例如:

>>> def add_str(x):
...     return x+"!"
...
>>> a
['abc', 'efg', 'hij']
>>> map(add_str, a)
['abc!', 'efg!', 'hij!']

你需要加入一个lamba,但你不应该使用map来产生副作用,它会比常规循环慢,不知道你为什么这么想*但显然没有在a中使用for元素:…因为它不聪明*因为像你这样使用map更糟糕,我想避免人们使用循环函数回答。就是这样。我也认为我的问题与“理解地图功能”有关,但它更具体。这不是真的复制品。感谢您的帮助:)除了他们表示不想使用列表理解和学习地图功能之外。如果被否决的选民能够对问题进行评论,以便改进响应,那将是非常好的。谢谢niemmi。你的回答很好。