使用 dict 和 set 从列表中删除重复项之间的区别?

Difference between removing duplicates from a list using dict and set?

根据我的研究,有两种简单的方法可以从列表中删除重复项:

a = list(dict.fromkeys(a))

a = list(set(a))

其中一个比另一个更有效吗?

当然,第二个更有效,因为集合或多或少是为此目的而创建的,并且您跳过了与创建 dict 相关的开销,后者更重。 性能方面,它绝对取决于实际有效载荷是什么。

import timeit
import random

input_data = [random.choice(range(100)) for i in range(1000)]

from_keys = timeit.timeit('list(dict.fromkeys(input_data))', number=10000, globals={'input_data': input_data})
from_set = timeit.timeit('list(set(input_data))', number=10000, globals={'input_data': input_data})

print(f"From keys performance: {from_keys:.3f}")
print(f"From set performance: {from_set:.3f}")

打印:

From keys performance: 0.230
From set performance: 0.140

这并不意味着它快了将近两倍。差异几乎看不出来。用不同的随机数据亲自尝试一下。

第二个答案更好,不仅因为它更快,而且它更好地显示了程序员的意图。 set()是专门用来描述元素不可重复的数学集合的,因此它符合这个目的,reader的意图很明确。另一方面 dict() 用于存储键值对,并没有说明意图。