在判断某个元素是否在列表和字典中的时候,这时候能够用字典进行存储,尽量不要用list。
字典的判断是O(1)的,list需要遍历,所以是O(n)。必要时候可以把list转换为set。不要直接用list进行。
import time
count = 1
start_time = time.time()
a = set(range(40001, 49999))
for i in range(1000000):
if i in a:
count += 1
end_time = time.time()
print count, end_time - start_time
count = 1
for i in range(1000000):
b = set(range(40001, 49999))
if i in b:
count += 1
start_time = time.time()
print count, start_time - end_time
这段代码中 只是set(range(40001, 49999))位置的差别,但是性能却有着非常大的差距。
我认为,主要因为是每次都需要把list转换成set的耗时。
在list和dict的运用中,深有体会。我的程序中本来用list,100万的数据量跑了50多分钟,把list修改为dict之后,
时间变成了几秒。
因为list整个程序跑了4个半小时,修改只用大概10分钟。