Python 集合与列表性能对比
许多读者质疑 Python 集合并不总是比列表快。本文将通过代码实验比较不同场景下的性能,并基于动态数组和哈希表特性解释原因。
1. 性能
不能说 Python 集合的性能总是比 Python 列表高。我们需要考虑不同的场景,例如创建、查找、追加和删除。
使用 Jupyter Notebook 进行测试时,可以使用 %timeit 魔法命令来评估经过的时间。
创建 – 列表胜出(快 2 倍)
要测试创建性能,我们可以简单地使用 range(10000) 来生成 10,000 个数字。请注意,这是一个生成器,但我们可以从这个生成器创建一个列表或一个集合。
# Create list for 100 times
%timeit -n 100 my_list = list(range(10000))
# Create set for 100 times
%timeit -n 100 my_set = set(range(10000))
可以看到,创建集合所需的时间大约是创建列表的两倍。这是因为集合的数据结构比列表消耗更多的时间和空间。
查找 – 集合胜出(快 1000 倍)
在测试查找性能之前,需要正确创建一个列表和一个集合,并准备一些用于测试的数字。
import random
# Create a list and a set
my_list = list(range(10000))
my_set = set(my_list)
# Random 1000 numbers for testing purpose
test_numbers = random.sample(range(10000), 1000)
现在,我们可以使用以下代码在 Jupyter Notebook 中测试查找性能。
%timeit -n 100
for num in test_numbers:
num in my_list
%timeit -n 100
for num in test_numbers:
num in my_set
由于 1ms = 1000μs,Python 集合的查找性能比 Python 列表快 1000 倍。

