map(function, iterable, ...)
Run Code Online (Sandbox Code Playgroud)
将函数应用于iterable的每个项目并返回结果列表.如果传递了其他可迭代参数,则函数必须采用那么多参数,并且并行地应用于所有迭代的项.
如果一个iterable比另一个短,则假定使用None项扩展.
如果是Nonefunction,则假定为identity函数; 如果有多个参数,则map()返回一个由包含所有迭代中相应项的元组组成的列表(一种转置操作).
可迭代参数可以是序列或任何可迭代对象; 结果始终是一个列表.
这在制作笛卡尔积的过程中扮演什么角色?
content = map(tuple, array)
Run Code Online (Sandbox Code Playgroud)
将元组放在哪里有什么影响?我也注意到,如果没有map函数,输出就是abc和它一样a, b, c.
我想完全理解这个功能.参考定义也很难理解.太多花哨的绒毛.
这与你可以使用Python生成器函数有什么相反?:python生成器,生成器表达式和itertools模块是我最近python的一些特性.它们在设置操作链以在大量数据上执行时特别有用 - 我经常在处理DSV文件时使用它们.
那么什么时候不是使用生成器,生成器表达式或itertools函数的好时机?
zip()过itertools.izip(),或range()结束xrange(),或[x for x in foo]结束(x for x in foo)?显然,我们最终需要将生成器"解析"为实际数据,通常是通过创建列表或使用非生成器循环对其进行迭代.有时我们只需知道长度.这不是我要问的.
我们使用生成器,因此我们不会将新列表分配给内存以用于临时数据.这对于大型数据集尤其有用.对于小型数据集也有意义吗?有明显的内存/ CPU权衡吗?
考虑到列表理解性能与map()和filter()的开放性讨论,我特别感兴趣的是,如果有人对此做了一些分析.(alt链接)
primes = [2,3,5,7..] (prime numbers)
map(lambda x:print(x),primes)
Run Code Online (Sandbox Code Playgroud)
它不打印任何东西.这是为什么?我试过了
sys.stdout.write(x)
Run Code Online (Sandbox Code Playgroud)
也是,但也不起作用.
结果是一个嵌套列表,如下所示:
>>> results
[[1, 2, 3, 'a', 'b'], [1, 2, 3, 'c', 'd'], [4, 5, 6, 'a', 'b'], [4, 5, 6, 'c', 'd']]
Run Code Online (Sandbox Code Playgroud)
pr是一个函数,定义如下:
>>> def pr(line):
... print line
Run Code Online (Sandbox Code Playgroud)
结果的正常迭代确实如下所示:
>>> for result in results:
... pr(result)
...
[1, 2, 3, 'a', 'b']
[1, 2, 3, 'c', 'd']
[4, 5, 6, 'a', 'b']
[4, 5, 6, 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
但是使用map进行隐式迭代会导致此行为:
>>> map(pr, results)
[1, 2, 3, 'a', 'b']
[1, 2, 3, 'c', 'd']
[4, 5, 6, 'a', 'b']
[4, 5, …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用mapPython中的函数,并且我遇到了一些麻烦.我无法分辨这些是将函数foo映射到列表栏的正确方法:
map(foo, bar)
Run Code Online (Sandbox Code Playgroud)
要么
newBar = map(foo, bar)
Run Code Online (Sandbox Code Playgroud)
我从不同的网站得到了不同的结果.哪些是正确的用法?
python ×4
dictionary ×1
generator ×1
iterator ×1
list ×1
map ×1
map-function ×1
optimization ×1
python-3.x ×1
return-type ×1