我測(cè)試了兩段代碼,發(fā)現(xiàn)在列表理解中使用集合之前聲明集合比在列表理解內(nèi)聲明集合快得多。為什么會(huì)發(fā)生這種情況?(使用python 3.9.13)
import time
# Setup
a = [x for x in range(10000)]
b = [x for x in range(8000)]
t = time.time()
b = set(b)
[x for x in a if x in b]
print(time.time() - t)
# 0.0010492801666259766
t = time.time()
[x for x in a if x in set(b)]
print(time.time() - t)
# 1.0515294075012207
我沒(méi)想到會(huì)有數(shù)量級(jí)的差異。。。
實(shí)際上,
set([iterable])
函數(shù)返回類型為set
的對(duì)象,在列表理解中,您在每次迭代中重復(fù)執(zhí)行該函數(shù),而在第一種情況下,您只將其結(jié)果引用到b
變量,并對(duì)引用的對(duì)象執(zhí)行列表理解。