2012-07-05 8 views
22

मैं कोड का एक टुकड़ा लिखने की कोशिश कर रहा हूं जो स्वचालित रूप से अभिव्यक्ति को कारक कर सकता है। उदाहरण के लिए, यदि मेरे पास दो सूचियां हैं [1,2,3,4] और [2,3,5], कोड दो सूचियों में सामान्य तत्वों को ढूंढने में सक्षम होना चाहिए, [2,3], और गठबंधन शेष तत्वों को एक नई सूची में, [1,4,5] होने के साथ।सूचियों में गैर-आम तत्व खोजें

इस पोस्ट से: How to find list intersection? मैं देख रहा हूँ आम तत्वों द्वारा

set([1,2,3,4]&set([2,3,5]). 

पाया जा सकता है कि वहाँ एक आसान तरीका प्रत्येक सूची से गैर आम तत्वों को पुनः प्राप्त करने है, मेरे उदाहरण है में [1,4 ] और [5]?

मैं आगे जा सकते हैं और पाश के लिए एक कार्य करें:

lists = [[1,2,3,4],[2,3,5]] 
conCommon = [] 
common = [2,3] 
for elem in lists: 
    for elem in eachList: 
    if elem not in common: 
     nonCommon += elem 

लेकिन यह निरर्थक और अक्षम लगता है। क्या पाइथन कोई आसान काम प्रदान करता है जो ऐसा कर सकता है? अग्रिम में धन्यवाद!!

+0

आप की तरह अलग-अलग सूचियों मिल चाहते हैं [1,4] और [5], या एक ही एक [1,4,5]? – nye17

उत्तर

40

set रों (XOR ऑपरेटर उर्फ) के लिए सममित अंतर ऑपरेटर का उपयोग करें:

>>> set([1,2,3])^set([3,4,5]) 
set([1, 2, 4, 5]) 
+0

ओह वाह धन्यवाद !! ब्यू उपर्युक्त कोड गणना के समय और मेमोरी स्पेस के बराबर मात्रा ([1,2,3]) सेट करता है और सेट ([3,4,5]) करता है? या कोड प्रदर्शन पर इसका कोई महत्वपूर्ण प्रभाव नहीं है? – turtlesoup

+0

यह आपके लक्ष्य को पूरा करने का सबसे प्रभावी तरीका है। इसकी जटिलता उसी क्रम पर है जैसे '&' (अर्थात्, सेट में तत्वों की संख्या में रैखिक)। – Amber

12

आप चौराहे अवधारणा का उपयोग समस्याओं के इस प्रकार से निपटने के लिए कर सकते हैं।

b1 = [1,2,3,4,5,9,11,15] 
b2 = [4,5,6,7,8] 
set(b1).intersection(b2) 
Out[22]: {4, 5} 

इस कोड का उपयोग करने के बारे में सबसे अच्छी बात यह है कि यह बड़े डेटा के लिए भी बहुत तेज़ काम करता है। मेरे पास 601 9 3 9 के साथ बी 1 है और 2 9 6029 तत्वों के साथ बी 2 है जब मैं इस तर्क का उपयोग करता हूं तो मुझे अपना परिणाम 2.9 सेकंड में मिलता है।

0

आप .__xor__ विशेषता विधि का उपयोग कर सकते हैं।

set([1,2,3,4]).__xor__(set([2,3,5])) 

या

a = set([1,2,3,4]) 
b = set([2,3,5]) 
a.__xor__(b) 
संबंधित मुद्दे