比如说,我想计算两个列表的差异C = A - B
:
A = [1,2,3,4,5,6,7,8,9]
B = [1,3,5,8,9]
C = [2,4,6,7] #Result
A
and B
都用唯一的整数排序(不确定是否有办法告诉Python列表的这个属性)。我需要保留元素的顺序。 AFAIK 有两种可能的方法
Method 1: 将 B 转换为集合并使用列表推导式生成 C:
s = set(B)
C = [x for x in A if x not in s]
Method 2: 直接使用列表理解:
C = [x for x in A if x not in B]
Why is #1
比更有效率#2
?转换成集合没有开销吗?我在这里缺少什么?
一些性能基准给出在这个答案。
UPDATE:我知道一组的平均值O(1)
查找时间胜过列表的查找时间O(n)
但如果原始列表A
包含大约一百万个左右的整数,集合的创建实际上不会花费更长的时间吗?