我有两个非常大的阵列。
这段代码运行得很慢吗?
results1 = [1,2,3..] results2 = [1,2,3,4 ... ] for result1 in results1: if result1 not in results2: print result1
答案 0 :(得分:7)
使用set
:
hashed = set(results2)
....
if result1 not in hashed:
请注意,如果您的阵列非常庞大,这需要大量内存。
或者,对两个数组进行排序并使用两个索引。如果两个元素相同,则递增两个索引。如果它们不相等,则递增包含较小元素的数组的索引。
答案 1 :(得分:1)
试试这个
l1 = [4,2,4,5,2,1,3,3,34,54,3445,4]
l2 = [5,7,4,5,8,5,2,4,56]
diff_l = list(set(l1)-set(l2))
了解更多操作Reference
但可能无法帮助完整或对大数据表现良好
答案 2 :(得分:0)
我不知道你是否想要明显的区别(a
中的元素,而不是b
中的元素)或对称差异(两者中不存在的元素),但幸运的是两者都可以将列表转换为regular set operations后,只需使用set即可完成。
但首先警告 - 转换列表要从列表中删除重复的元素,因为set不能包含重复项。
所以我们要声明我们的数据。:
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = [12, 11, 10, 9, 8, 7, 6]
要获得明显的差异,即a
中存在的元素,而不是b
中的元素:
>>> set(a) - set(b)
set([0, 1, 2, 3, 4, 5])
获得对称差异(即只存在于一个数组中但不存在于两个数组中的元素):
>>> set(a) ^ set(b)
set([0, 1, 2, 3, 4, 5, 10, 11, 12])
作为额外的奖励,两者中存在的元素:
>>> set(a) & set(b)
set([8, 9, 6, 7])