2012-07-11 26 views
19

संभव डुप्लिकेट:
Get difference from two lists in Pythonअजगर में सूची से सूची निकालें

ऐसा करने का एक सरल तरीका क्या है? मैं अपने आप पर कोशिश कर रहा हूं, और मैं इसे समझ नहीं सकता। सूची और सूची बी, नई सूची में ऐसी वस्तुएं होनी चाहिए जो केवल सूची में हों। तो:

a = apple, carrot, lemon 
b = pineapple, apple, tomato 
new_list = carrot, lemon 

मैंने कोड लिखने की कोशिश की, लेकिन हर बार जब यह हमेशा पूरी सूची को मेरे पास लौटाता है।

उत्तर

5

क्या यह आपके लिए काम करेगा?

a = ["apple", "carrot", "lemon"] 
b = ["pineapple", "apple", "tomato"] 

new_list = [] 
for v in a: 
    if v not in b: 
     new_list.append(v) 

print new_list 

या, अधिक संक्षेप में:

new_list = filter(lambda v: v not in b, a) 
21

आप इस एक list comprehension जो हमें काफी सचमुच जो तत्वों new_list में समाप्त करने की जरूरत है बताता है का उपयोग कर लिख सकते हैं:

a = ['apple', 'carrot', 'lemon'] 
b = ['pineapple', 'apple', 'tomato'] 

# This gives us: new_list = ['carrot' , 'lemon'] 
new_list = [fruit for fruit in a if fruit not in b] 

या, का उपयोग करते हुए लूप के लिए:

new_list = [] 
for fruit in a: 
    if fruit not in b: 
     new_list.append(fruit) 

जैसा कि आप देख सकते हैं कि ये दृष्टिकोण काफी समान हैं, यही कारण है कि पाइथन में आसानी से सूचियां बनाने के लिए सूची की समझ है।

3

आप इस चाहते हो सकता है:

a = ["apple", "carrot", "lemon"] 
b = ["pineapple", "apple", "tomato"] 

new_list = [x for x in a if (x not in b)] 

print new_list 
13

आप उपयोग कर सकते हैं एक set:

# Assume a, b are Python lists 

# Create sets of a,b 
setA = set(a) 
setB = set(b) 

# Get new set with elements that are only in a but not in b 
onlyInA = setA.difference(b) 

अद्यतन
रूप iurisilvio और mgilson ने बताया, इस दृष्टिकोण तभी काम करता है a और b करना डुप्लिकेट नहीं है, और यदि तत्वों का क्रम कोई फर्क नहीं पड़ता है।

+0

मुझे लगता है कि यह जाने का रास्ता है देता है, लेकिन यह अगर यह तार दोहराया गया है सूची बदल जाता है। – iurisilvio

+1

@iurisilvio: आप सही हैं। यह दृष्टिकोण केवल तभी काम करता है जब 'ए' और' बी' में केवल अनन्य प्रविष्टियां हों। उस स्थिति में यह 'ए',' बी' के लिए 'सेट' का उपयोग करने के लिए और भी अधिक समझ में आता है। लेकिन फिर यह शायद सबसे तेज़ दृष्टिकोण है। –

+0

आइटम का ऑर्डर करने पर यह भी काम नहीं करता है, लेकिन यह मामला यहां नहीं हो सकता है (मेरे द्वारा +1) – mgilson

2

कैसे sets का उपयोग कर (या set में बनाया के बाद से सेट 2.6 में पदावनत किया गया था) के बारे में?

from sets import Set 
a = Set(['apple', 'carrot', 'lemon']) 
b = Set(['pineapple','apple','tomato']) 
new_set = a.difference(b) 
print new_set 

उत्पादन

Set(['carrot', 'lemon']) 
+0

बिल्टिन 'सेट' का उपयोग क्यों नहीं करें? – mgilson

+0

मुझे उस उदाहरण से [पायथन डॉक्स] (http://docs.python.org/library/sets.html#sets.Set) में मिला है, लेकिन मुझे यकीन नहीं है कि उन्होंने ऐसा क्यों किया, कोई विचार? – StuGrey

+0

'सेट' को पाइथन v2.6 के बाद बहिष्कृत किया गया है (http://docs.python.org/library/sets.html देखें) –

संबंधित मुद्दे