Skip to main content
 首页 » 编程设计

python之为什么不总是使用 map 如果它比其他方法更快(列表理解,循环(各种变体))

2024年10月01日30qlqwjy

<分区>

我遇到了几篇文章和 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 应该总是被使用,因为它比其他的更快吗?根据各种文章,列表推导式被认为更具可读性,但可读性应该是第一要务还是显着的速度?

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