成员检查操作的效率很大程度上依赖于所使用的数据结构。
import timeit
large_dataset = range(100000)
search_element = 2077
large_list = list(large_dataset)
large_set = set(large_dataset)
def list_membership_test():
return search_element in large_list
def set_membership_test():
return search_element in large_set
print(timeit.timeit(list_membership_test, number=1000))
# 0.01112208398990333
print(timeit.timeit(set_membership_test, number=1000))
# 3.27499583363533e-05
如上述代码演示的那样,在集合中进行成员测试的效率远高于在列表中进行相同的操作。
原因何在呢?
在Python的列表中,成员测试(即element in list)是通过逐个遍历元素,直到找到目标元素或到达列表末尾来实现的。因此,这一操作的时间复杂度为O(n)。
而Python中的集合则是基于哈希表实现的。进行成员检查(element in set)
时,Python利用哈希机制,其平均时间复杂度是O(1)。
这说明在编程时仔细考虑使用的底层数据结构非常重要。选用合适的数据结构可以显著提升代码的执行效率。