python - 如果map比其他的更快(列表理解、循环(各种变体)),为什么不总是使用map呢?

标签 python python-3.x loops dictionary list-comprehension

我看到了一些文章和 StackOverflow 讨论,其中通常建议在处理列表时使用列表理解。

我通常会遇到一个常见的循环结构,其中有一个列表,我必须处理它并将结果存储在一个新列表中。

所以类似(为了举例):

1)创建一个大的字符串列表以达到目的

from random import choice
from string import ascii_uppercase
import time

oldlist = ([''.join(choice(ascii_uppercase) 
                    for i in range(10)) for x in range(1000000)])

2) 使用循环、列表理解和映射来处理它 循环变体 1:

start_time = time.time()
newlist = []
for word in oldlist:
    newlist.append(word.lower())
print(time.time()-start_time) # 0.1368732452392578

循环变体 2:

start_time = time.time()
newlist = []
append = newlist.append
for word in oldlist:
    append(word.lower())
print(time.time()-start_time)# 0.1112520694732666

列出比较:

start_time = time.time()
newlist = [word.lower() for word in oldlist]
print(time.time()-start_time) # 0.07511067390441895

map :

start_time = time.time()
newlist = map(str.lower, oldlist)
print(time.time()-start_time) # 3.0994415283203125e-06

我是否可以假设在这种情况下应该始终使用 map ,因为它比其他 map 更快?根据各种文章,列表理解被认为更具可读性,但可读性应该是第一优先级还是显着的速度?

注意:我只进行了五次迭代的平均值,因此这些时间值可能会略有变化。然而,它给了我们一个指示。 Python版本:3

最佳答案

编写代码时,性能并不总是第一要务。在很多情况下,我们可能不会关心列表理解中丢失的 µs,如果它有助于稍后阅读和维护代码。

我相信列表理解比 map 更容易阅读和理解,尽管性能损失很小。

编辑,正如 ayhan 在评论中所述,您的示例是有偏差的,因为 map 返回一个生成器,因此它在迭代之前不会生成任何内容,而列表理解在声明时计算整个列表。

关于python - 如果map比其他的更快(列表理解、循环(各种变体)),为什么不总是使用map呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46789803/

相关文章:

python - 如何比较 pandas groupby 对象的列值并将它们汇总到新的列行中

python - 编写类似开关的正则表达式的简单方法

python - 如何重命名路径名?

loops - 是否可以使用while循环制作标签?

excel - 输入框避免空白条目

python - ttk 样式 "TNotebook.Tab"背景和边框宽度不起作用

python - 将蜘蛛结果保存到数据库

python - 了解序列解包 : Why does using a set throw "SyntaxError: can' t assign to literal"?

python-3.x - 使用python 3.6安装自定义构建tensorflow 1.12车轮时出错

java - while循环忽略or语句