用map函数传递参数

时间:2016-05-06 20:17:24

标签: python python-2.7

说明

a = ['abc', 'efg', 'hij']

我想要

a = ['abc!', 'efg!', 'hij!']

但显然没有使用for elements in a: ...因为它不是切割器,我想更多地了解map函数以及它如何传递参数。

所以我尝试使用map函数将'!'附加到列表的所有元素。但在此之前,appendlist方法,但不是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使用的方法。 谢谢。

3 个答案:

答案 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!']