Python设置列表比较算法的哈希表性能

Python设置列表比较算法的哈希表性能,python,time-complexity,Python,Time Complexity,我的印象是Python中的集合是使用哈希表实现的。但是,在下面的代码中,基于集合的版本的性能要比哈希表版本好得多。我想sets实现与我在count\u common\u elements\u hash\u table()中所做的完全不同。谁能解释一下性能上的差异吗 import random import time import decimal def count_common_elements_sets(l1, l2): common_elements = set(l1).inter

我的印象是Python中的集合是使用哈希表实现的。但是,在下面的代码中,基于集合的版本的性能要比哈希表版本好得多。我想sets实现与我在
count\u common\u elements\u hash\u table()
中所做的完全不同。谁能解释一下性能上的差异吗

import random
import time
import decimal

def count_common_elements_sets(l1, l2):
    common_elements = set(l1).intersection(l2)
    return len(common_elements)


def count_common_elements_hash_table(l1, l2):
    table = {}
    common_elements = []
    for v in l1:
        table[v] = True
    count = 0
    for w in l2:
        if table.get(w):  # Avoid KeyError that would arise with table[w]
            common_elements.append(w)
            count += 1
    return count


l1 = [random.randint(0, 99) for _ in range(1000)]
l2 = [random.randint(0, 99) for _ in range(1000)]



# Time execution
start = time.perf_counter()
count_common_elements_hash_table(l1, l2)
end = time.perf_counter()
print("Hash table version: {:.7f}".format(end - start))

# Time execution
start = time.perf_counter()
count_common_elements_sets(l1, l2)
end = time.perf_counter()
print("Sets version: {:.7f}".format(end - start))

因为您在
集合
对象上使用内置的
.intersection
方法。通过您的
dict
实现,您基本上获得了交叉点,但它是在Python中实现的。在C中实现的
set.intersection
方法。内置函数/方法几乎总是比在python解释器级别执行的等效算法快,因为您在
set
对象上使用内置的
.intersection
方法。通过您的
dict
实现,您基本上获得了交叉点,但它是在Python中实现的。在C中实现的
set.intersection
方法。内置函数/方法几乎总是比在python解释器级别执行的等效算法更快