我是编程的新手,当我使用python时,我发现了' in'操作在不同数据结构上的表现是完全不同的。例如:
GeneralWindowView
我结束了这样的结果,这是非常有效的
a=list_a######list_a and list_b both are lists,data scale:300,000
b=set(list_b)
t1=time()
s=0
for entry in a:
if entry in b:
s+=1
t2=time()
print t2-t1
然而,当我搜索list_b而不改变为设置数据结构
0.0699999332428
这次结果花了将近十分钟
a=list_a
b=list_b
t1=time()
s=0
for entry in a:
if entry in b:
s+=1
t2=time()
print t2-t1
我搜索了互联网,发现这与哈希地图有某种关系,但仍然令人困惑。任何人都可以详细解释这个或者python中有其他类似的数据结构吗?
提前感谢。
答案 0 :(得分:3)
列表具有线性时间查找。这是因为要查找项目是否在列表中,Python需要扫描每个项目,直到找到匹配项;所以它花费的时间与列表的长度成正比。列表越长,需要的时间越长。在计算机科学术语中,这被称为O(n)
时间复杂度。
集和词典具有恒定时间查找。它们不仅仅存储一系列元素,只按位置索引,而是存储值的哈希值。要查找是否存在匹配项,Python会散列值并转到匹配的索引。无论集合多大,它总是需要相同的时间 - 这被称为O(1)
复杂性。