如何檢查列表中是否有以下項目之一?我試圖找到一個簡短的方法來查看列表中是否有以下任何項目,但我的第一次嘗試不起作用。除了編寫一個完成此功能的函數之外,還有一種簡短的方法可以檢查列表中是否存在多個項目之一。>>> a = [2,3,4]>>> print (1 or 2) in aFalse>>> print (2 or 1) in aTrue
3 回答

陪伴而非守候
TA貢獻1757條經驗 獲得超8個贊
>>> L1 = [2,3,4]
>>> L2 = [1,2]
>>> [i for i in L1 if i in L2]
[2]
>>> S1 = set(L1)
>>> S2 = set(L2)
>>> S1.intersection(S2)
set([2])
空列表和空集都是False,因此您可以直接將該值用作真值。

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
我不得不說我的情況可能不是你想要的,但它可能會提供你的想法的替代方案。
我已經嘗試了set()和any()方法,但仍然存在速度問題。所以我記得Raymond Hettinger說python中的所有內容都是字典,并且只要你能使用dict就可以使用dict。這就是我的嘗試。
我使用帶有int的defaultdict來表示否定結果,并使用第一個列表中的項作為第二個列表的鍵(轉換為defaultdict)。因為您可以使用dict進行即時查找,所以您可以立即知道該項是否存在于defaultdict中。我知道你并不總是為第二個列表更改數據結構,但是如果你能夠從一開始就能夠更快,那么它就會更快。您可能必須將list2(較大列表)轉換為defaultdict,其中key是您要從小列表中檢查的潛在值,value是1(hit)或0(no hit,default)。
from collections import defaultdict already_indexed = defaultdict(int)def check_exist(small_list, default_list): for item in small_list: if default_list[item] == 1: return True return Falseif check_exist(small_list, already_indexed): continueelse: for x in small_list: already_indexed[x] = 1
添加回答
舉報
0/150
提交
取消