结论:
插入速度:
- list append 速度最快
- dict[i] =1 的速度紧随其后!
查询速度上:
- set的查询速度最快
- dict的查询速度次之
这一段时间经常用python做数据的处理,需求中数据量上大约要100万条以下,在优化处理速度时主要提升数据的查询、插入效率。
插入速速
python 的list、dict、set插入比较
# coding:utf-8
import time
number = 100000
set1 = set()
set2 = set()
list1= []
dict1 = {}
start = time.time()
for i in range(number):
set1.add(i)
end = time.time()
print("set add:", end - start)
start = time.time()
for i in range(number):
set2.update([i])
end = time.time()
print("set update:", end - start)
start = time.time()
for i in range(number):
list1.insert(0, i)
end = time.time()
print("list insert:", end - start)
start = time.time()
for i in range(number):
list1.append(i)
end = time.time()
print("list append:", end - start)
start = time.time()
for i in range(number):
dict1.update({i: 1})
end = time.time()
print("dict update:", end - start)
start = time.time()
for i in range(number):
dict1[i] = 1
end = time.time()
print("dict[i] = :", end - start)
运行的结果是
python各变量的插入效率对比.py
set add: 0.008615493774414062
set update: 0.015752315521240234
list insert: 1.4502811431884766
list append: 0.006005764007568359
dict update: 0.01952505111694336
dict[i] = : 0.006249427795410156
查询速度
python 的list、dict、set、tuple查询速度比较
# coding:utf-8
import numpy
import time
l = []
sl = set()
dl = dict()
r = numpy.random.randint(0, 10000000, 100000)
for i in range(0, 100000):
l.append(r[i])
sl.add(r[i])
dl.setdefault(r[i], 1)
# 生成3种数据结构供查找,常规的list,集合sl,字典dl.里面的元素都是随机生成的,为什么要随机生成元素?这是防止某些结构对有序数据的偏向导致测试效果不客观。
tp = tuple(l)
start = time.time()
for i in range(100000):
t = i in sl
end = time.time()
print("set:", end - start)
# 计算通过set来查找的效率
start = time.time()
for i in range(100000):
t = i in dl
end = time.time()
print("dict:", end - start)
# 计算通过dict的效率
start = time.time()
for i in range(100000):
t = i in tp
end = time.time()
print("tuple:", end - start)
# 计算通过tuple的效率
start = time.time()
for i in range(100000):
t = i in l
end = time.time()
print("list:", end - start)
# 计算通过list的效率
运行结果
set: 0.0072100162506103516
dict: 0.00818181037902832
tuple: 340.1857137680053732
list: 274.461221694946345