Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python map/filter/reduce with函数或匿名函数_Python_Collections_Lambda - Fatal编程技术网

Python map/filter/reduce with函数或匿名函数

Python map/filter/reduce with函数或匿名函数,python,collections,lambda,Python,Collections,Lambda,当我在命令行执行此操作时(对于filter和reduce相同) 因此,不是列表/集合。。。我得到了 要获得列表,我必须应用list()函数 如果我使用一个普通的旧函数来替换lambda,也会发生同样的情况 为什么会出现这种行为?函数map不返回列表,而是返回迭代器 返回一个迭代器,该迭代器将函数应用于iterable的每个项,并生成结果 有更多信息。因为许多迭代函数使用“惰性”求值。也就是说,它们不会立即将函数应用于列表的所有元素。相反,当“映射对象”被迭代时,他们使用一个协同程序一次应用一个

当我在命令行执行此操作时(对于filter和reduce相同)

因此,不是列表/集合。。。我得到了

要获得列表,我必须应用list()函数 如果我使用一个普通的旧函数来替换lambda,也会发生同样的情况


为什么会出现这种行为?

函数
map
不返回列表,而是返回迭代器

返回一个迭代器,该迭代器将函数应用于iterable的每个项,并生成结果


有更多信息。

因为许多迭代函数使用“惰性”求值。也就是说,它们不会立即将函数应用于列表的所有元素。相反,当“映射对象”被迭代时,他们使用一个协同程序一次应用一个函数


当某些(但不是全部)项将被迭代,或者可能不需要一次确定所有项时,这是一个性能特性。lambda仅在需要时应用。python的早期版本没有这种优化,而是在调用
map
后将lambda应用于所有内容。

强烈反对“复制”标记。。。我的问题有一个技术方面需要解释。。。您提出的问题只是说如何使用该方法……抱歉,这不是问题。对该问题的公认答案是“在Python3+中,许多在iterables上进行迭代的进程本身返回迭代器”。这就是技术原因。他们问的是为什么会发生这种情况,而不是输出的
type()
是什么。这是一个很好的答案。。。只要更正链接。。。您已将描述粘贴到url中。。。英雄联盟今天早上我显然无法粘贴。我要休息一下,谢谢ZEE。你能证明函数是懒惰的吗?据我所知,在
map()
的情况下,算法与
for
循环有很大不同。前者比前者快2.5亿倍。在5000万行的列表上测试
map()
,需要450 ns,结果立即可用。另一方面,对相同数据执行
for
循环大约需要1.1分钟。我同意算法是不同的。对于我所说的“懒惰”的意思,可能有点术语上的误解。我的意思是,它只在需要时工作。调用
map
时,它不会在整个列表上循环并在每个元素上应用lambda,而是等待map对象被迭代,并将lambda应用到每个元素上,就像迭代器生成它一样,通过报复的方式否决是确保人们在下次你问你为什么被否决时不会回应你的一种可靠方式。只是不同意你的答案,对不起。我看不到证据。我尊重你的意见,我希望你尊重我的意见。欢迎你不要回答。懒惰在这里的意思是“延迟执行直到需要”。。。并不是说代码不好。。。LOL;-)
map( lambda x: x+1, [1,2,3,4,5] )