带字符的Python映射元素

带字符的Python映射元素,python,Python,我是python新手,我正在尝试理解map函数。有没有更好的方法 map(lambda x: x+"+" ,map(str,range(5))) output : ['0+', '1+', '2+', '3+', '4+'] 对于大多数这样的任务,最好使用列表理解,如: [str(i) + '+' for i in range(5)] 这里,您正在构造一个列表,其中每个元素仅取决于数字i。使用stri++是构建所需元素的一种方法。另一个是{}+.formati,但这与使用列表理解无关 地

我是python新手,我正在尝试理解map函数。有没有更好的方法

 map(lambda x: x+"+" ,map(str,range(5)))
 output : ['0+', '1+', '2+', '3+', '4+']

对于大多数这样的任务,最好使用列表理解,如:

[str(i) + '+' for i in range(5)]
这里,您正在构造一个列表,其中每个元素仅取决于数字i。使用stri++是构建所需元素的一种方法。另一个是{}+.formati,但这与使用列表理解无关

地图与列表理解 map函数在功能上等同于列表理解语法的限制使用。考虑下面的通用示例,这些示例将产生相同的输出:

list(map(fun, iterable))
[fun(el) for el in iterable]

在您的示例中,您使用lambda表达式在map调用中构建函数fun。在Python 3中,附加的列表调用是必需的,因为map返回的是生成器而不是列表。

正如您在map中所说的,您可以映射如下内容:

print(list(map(lambda x:str(x)+'+',range(5))))
输出:

['0+', '1+', '2+', '3+', '4+']
其他信息:

map是一个具有两个参数的函数:

map(g, iterable)
第一个参数函数是函数,第二个参数函数是序列

Python3映射相当于生成器表达式

(g(x) for x in iterable)
可以将format方法直接用作映射参数:

map("{}+".format, range(5))

['{}+'.formatx for x in range5]这是基于观点的。有些人反对使用地图,也不认为它是Pythic的,有些是。我是说,双重映射调用有点多余。您可以直接在lambda函数中对str调用进行编码。但你可以这样做,也可以列一个清单。两者都可以。是否有什么特别的东西让您对map函数感到困惑?你似乎理解它的作用。如果你坚持使用lambda,至少用一个映射列表maplambda x:{}+.formatx,range5Fun和范畴理论:mapf,mapg,xs==maplambda x:fgx,xs来实现纯函数f和g。这是一个明显的小变化。对于如此简单的字符串操作,没有真正的改进。这是一个性能上的重大改进,因为它用C语言实现的函数替换了用户定义的函数。是的,因为map永远不会用于超过5个元素的列表。@jpmc26:主要的一点是,您需要一个可调用的函数,通常人们首先会在lambda上思考,但是有更好的方法,直接使用方法。此外,问题清楚地表明OP试图理解map函数;不要拘泥于他们使用的确切示例。小诡辩:在Python 3中,map相当于iterable中x的生成器表达式gx,而不是列表理解。@chepner感谢提供信息:一些解释对OP非常有用。这根本无法解释map函数
output = ['{}+'.format(i) for i in range(5)]
print output
['0+', '1+', '2+', '3+', '4+']