说明
a = ['abc', 'efg', 'hij']
我想要
a = ['abc!', 'efg!', 'hij!']
但显然没有使用for elements in a:
...因为它不是切割器,我想更多地了解map
函数以及它如何传递参数。
所以我尝试使用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
使用的方法。
谢谢。
答案 0 :(得分:1)
您可以使用以下代码获得预期结果:
a = ['abc', 'efg', 'hij']
map(lambda x: x + '!', a) # ['abc!', 'efg!', 'hij!']
map
的第一个参数是应用于iterable
上第二个参数的所有项目的函数。您无法直接将参数传递给给定map
的函数,但您可以创建另一个传递参数的函数(或lambda
),就像上面的示例一样。
通常list comprehension
应优先于map
,因为它更明显地在做什么:
[x + '!' for x in a] # ['abc!', 'efg!', 'hij!']
答案 1 :(得分:1)
map
收到两个参数,一个函数和一个列表。
它为每个项目调用一次函数,并将当前项目作为参数。
由于map
返回的内容,将字符串转换为列表并附加到它们可能不是最佳选择,但您实际上可以使用+
运算符将字符串追加到字符串中。
您可以通过执行以下操作来实现您的目标:
map(lambda s: s + '!', a) # => ['abc!', 'efg!', 'hij!']
lambda
只是函数的另一种语法,它的参数名为s,它返回s + '!'
。
答案 2 :(得分:0)
使用list comprehension
:
>>> a = ['abc', 'efg', 'hij']
>>> ["{}!".format(x) for x in a]
['abc!', 'efg!', 'hij!']
地图如何运作
map(function,iterator)
它将元素打开一个并将指定的函数应用于每个元素
示例:
>>> def add_str(x):
... return x+"!"
...
>>> a
['abc', 'efg', 'hij']
>>> map(add_str, a)
['abc!', 'efg!', 'hij!']