map(function, iterable, ...)
对iterable的每个项应用函数并返回结果列表。如果传递了其他可iterable参数,则函数必须接受该多个参数,并并行应用于所有可iterable中的项。
如果一个iterable比另一个iterable短,则假定该iterable扩展时没有任何项。
如果函数是None
,则假定为identity函数;如果有多个参数,map()
返回一个由元组组成的列表,其中包含来自所有iterable的相应项(一种转置操作)。
iterable参数可以是序列或任何iterable对象;结果总是一个列表。
这在制造笛卡尔产品中扮演什么角色?
content = map(tuple, array)
把元组放在里面有什么效果?我还注意到,没有map函数的输出是abc
,有了它,输出是a, b, c
。
我想完全理解这个函数。参考定义也很难理解。太花哨了。
map
通过对源的每个元素应用函数来创建新列表:n元
map
相当于将输入iterable压缩到一起,然后对中间压缩列表的每个元素应用转换函数。它不是笛卡尔积:我在这里使用了
zip
,但是map
当iterables的大小不同时,行为实际上略有不同——正如其文档中所述,它将iterables扩展为包含None
。map
与笛卡尔积一点关系都没有,尽管我认为精通函数式编程的人可能会想出一些无法理解的使用map
生成笛卡尔积的方法。Python 3中的
map
等价于:Python 2的唯一区别是它将建立一个完整的结果列表,以便一次返回所有结果,而不是
yield
。尽管Python约定通常倾向于使用列表理解(或生成器表达式)来获得与调用
map
相同的结果,特别是当您使用lambda表达式作为第一个参数时:作为您在“将字符串转换为数组”问题的注释中所要求的示例,按“array”可能需要元组或列表(它们的行为都有点像其他语言的数组)
这里使用
map
的方法是,从字符串的列表开始,而不是从单个字符串开始-map
可以分别列出所有字符串:注意,
map(list, a)
在Python 2中是等价的,但是在Python 3中,如果您想做任何事情,而不是将其馈送到一个for
循环(或者一个只需要iterable而不是sequence的处理函数,如sum
),则需要list
调用。但也要再次注意,列表理解通常是首选的:map
不是特别的Python。我建议改为使用列表理解:基本相当于:
map
本身不能做笛卡尔积,因为其输出列表的长度始终与其输入列表的长度相同。您可以简单地使用列表理解来完成笛卡尔积:语法有点混乱--基本上相当于:
相关问题 更多 >
编程相关推荐