使用python從一個列表中尋找不在另一個列表中的數據的方法

假設有以下兩個數據集列表

a = list(range(1, 100000))
b = list(range(150000, 50000, -1))

要從a中找到不在b中的數據,常常會想直接遍歷兩個列表即可

a_alone = []

start = time.time()
for i in a:
    if i not in b:
        a_alone.append(i)
end = time.time()

print(end - start)  # 117s

可以看到效率是非常低下的,相當於O(n2)的時間複雜度

利用集合則能大幅提高效率

a_set = set(a)
b_set = set(b)

start = time.time()
# 求差集得到的是在a裏但不在b裏的數據集合,a獨有
# 如果a,b不是空集合,a-b爲空集合,說明a中的數據全部在b中
a_alone = a_set - b_set

end = time.time()

print(end - start)  # 0.003s

效率大幅提升,相當於O(n)的時間複雜度(不清楚python的set實現機制,該處根據java中hashSet實現機制進行的推測)

集合的一些其他操作

# 求並集
c_set = a_set | b_set

# 求交集,結果集如果爲空,說明兩個集合沒有任何數據是相同的
d_set = a_set & b_set
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章