2015-06-17 12 views
6

अगर मैं एक तत्व है अकेले इस आसान है:कैसे जांचें कि सूची ए से कोई तत्व पायथन में सूची बी में मौजूद नहीं है या नहीं?

 
>>> 3 not in [2, 3, 4] 
False 
>>> 3 not in [4, 5, 6] 
True 

लेकिन क्या होगा अगर मैं दो सूचियों है और यदि सूची A में तत्वों सूची B में होते हैं जाँच करने के लिए है?

A=[1,2,3,4] 
B=[4,5,6,7] 

मैं एक परिणाम मुझे दिखा रहा है कि 1, 2, 3 नहीं सूची B में हैं कैसे मिलता है?

+1

यह सवाल पूछा गया है एक लाख गुना। –

+0

[संभावित तत्वों को सूची में नहीं ढूंढना] के संभावित डुप्लिकेट [http://stackoverflow.com/questions/2104305/finding-elements-not-in-a-list) –

उत्तर

1

का उपयोग सूची समझ:

truthy जवाब तत्वों दूसरी सूची में मौजूद नहीं की

any([True for x in [1, 2, 3, 4] if x in [4, 5, 6, 7]]) 

सूची

[x for x in [1, 2, 3, 4] if x not in [4, 5, 6, 7]] 
+0

कृपया अपना उत्तर समझाएं, ताकि पूछताछ समझ सके कि कैसे यह काम करता हैं। – SuperBiasedMan

0

सेट पर बूलियन के संचालन के लिए एक विशिष्ट मामले है कि:

zerotonine = set(range(10)) 
fourtoten = set(range(4,11)) 
print "exclusively in one:", zerotonine^fourtoten 
exclusively in one: set([0, 1, 2, 3, 10]) 
4

यदि सूची में आइटम्स hashable हैं:,

>>> list(filter(lambda a: a not in B, A)) 
[1, 2, 3] 
उस मामले में

अगर Bअनुसार क्रमबद्ध है, तो आप एक बेहतर हो सकता है:

>>> set(A) - set(B) 
{1, 2, 3} 

अन्यथा, आप filter समारोह का उपयोग कर सकते bisect.bisect_left का प्रयोग करके लॉगरिदमिक रूप से खोज करने के लिए प्रदर्शन:

>>> def pred(a): # if B is already *sorted* 
...  from bisect import bisect_left 
...  i = bisect_left(B, a) 
...  return i == len(B) or B[i] != a 
... 
>>> list(filter(pred, A)) 
[1, 2, 3] 
1

आप set का उपयोग कर सकते हैं।

उदा।

>>> a=[1,2,3,4] 
>>> b=[4,5,6,7] 
>>> list(set(a)-set(b)) 
[1, 2, 3] 
>>> 
3

तुम भी सूची समझ का उपयोग कर सकते हैं:

C=[i for i in A if i not in B] 

आउटपुट:

[1, 2, 3] 
1
set(A).difference(B) # set operation for difference between two collections A and B 
संबंधित मुद्दे