如何区分一个非常大的数组?

时间:2011-08-04 07:49:46

标签: python algorithm

我有两个非常大的阵列。

这段代码运行得很慢吗?


results1 = [1,2,3..]
results2 = [1,2,3,4 ... ]


for result1 in results1:
    if result1 not in results2:
        print result1

3 个答案:

答案 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])
相关问题