是否有理由更喜欢使用map()
列表理解,反之亦然?它们中的一个通常比另一个效率更高,或者通常被认为比另一个更Python化吗?
在某些情况下,map
可能会在显微镜下更快(当你不是为此目的生成lambda
,而是在map
和listcomp
中使用相同的函数时)。在其他情况下,列表理解可能更快,大多数(并非所有)蟒蛇认为它们更直接、更清晰。
使用完全相同的函数时map
的微小速度优势的一个示例:
$ python -mtimeit -s'xs=range(10)' 'map(hex, xs)'
100000 loops, best of 3: 4.86 usec per loop
$ python -mtimeit -s'xs=range(10)' '[hex(x) for x in xs]'
100000 loops, best of 3: 5.58 usec per loop
当地图需要使用lambda时,如何完全颠倒性能比较的示例:
$ python -mtimeit -s'xs=range(10)' 'map(lambda x: x+2, xs)'
100000 loops, best of 3: 4.24 usec per loop
$ python -mtimeit -s'xs=range(10)' '[x+2 for x in xs]'
100000 loops, best of 3: 2.32 usec per loop
问题内容: 伙计们 我正在尝试找到问题的最优雅解决方案,并且想知道python是否为我想做的事情内置了任何东西。 我正在做的是这个。我有一个列表,并且我有一个接受项目并返回列表的函数。我可以使用列表推导来转换所有内容,例如: 但这返回一个列表列表; 我真正想要的是获取扁平化的列表; 现在,其他语言也有它。传统上用函数式编程语言来称呼它,而.Net称它为。python有类似的东西吗?有没有一种巧妙的
问题内容: 我有一个列表,我只想在满足特定条件的条目上使用特定功能-保留其他条目不变。 例如:假设我只想将偶数个元素乘以2。 想要的结果: 但是产量(它还充当过滤器)。 正确的解决方法是什么? 问题答案: 使用条件表达式: (数学怪人的注:您也可以使用 但无论如何我还是更喜欢第一种选择;)
问题内容: 我有这个嵌套列表: 现在,我要做的是将列表中的每个元素转换为float。我的解决方案是这样的: 但这可以使用嵌套列表理解来完成吗? 我所做的是: 但是结果是一堆100的总数为2400。 任何解决方案,解释将不胜感激。谢谢! 问题答案: 这是使用嵌套列表理解的方法: 这将为你提供一个列表列表,与你开始时的列表类似,只是使用浮点数而不是字符串。如果你想要一个固定列表,则可以使用。
问题内容: 看一下下面的代码,它显示列表理解。 当您在 Python 2.6中 执行代码示例时,它将显示 99 ,但是在 Python 3.x中 执行它时,将显示 6 。 更改行为的原因是什么,为什么 Python 3.x中 的输出 6 是? __ 先感谢您! 问题答案: 旧的行为是一个错误,但是由于某些代码依赖于此,因此无法轻松修复。 列表推导中的变量应与顶层变量不同。从逻辑上讲,它应该有自己的
问题内容: 加入列表: join 必须采取迭代。 显然,join的论点是,这是一个列表理解。 看这个: 现在,join的参数为,但结果相同。 为什么?是否str还会产生列表或可迭代项? 问题答案: 这称为生成器表达式,并在PEP 289中进行了说明。 生成器表达式和列表理解之间的主要区别在于前者不在内存中创建列表。 请注意,还有第三种编写表达式的方法:
问题内容: 如何在Python中执行以下操作? 实质上: 用空字符串替换所有的None,然后 执行功能。 问题答案: 你可以完全做到这一点,这只是一个订购问题: 一般来说, 而且,if仅对于具有条件的列表理解而言, 请注意,这实际上使用了一种不同的语言构造,即条件表达式,它本身不是理解语法的一部分,而ifafter则for…in是列表理解的一部分,用于从可迭代的源中筛选元素。 条件表达式可用于各种