यदि आपकी सूचियों में डुप्लिकेट नहीं हो सकते हैं और आपको ऑर्डर की परवाह नहीं है तो आपको सूचियों के बजाय सेट का उपयोग करना चाहिए (वैसे, उन्हें सूचियां कहा जाता है, सरणी नहीं)।
>>> set1 = set(["abc", "def", "ghi", "jkl"])
>>> set2 = set(["abc", "ghi", "456", "789"])
>>> set2 - set1
set(['456', '789'])
List2 डुप्लिकेट या आदेश मामलों को शामिल कर सकते हैं तो आप अभी भी खोज के तेजी लाने के लिए एक सेट List1 कर सकते हैं:
>>> list1 = ["abc", "def", "ghi", "jkl"]
>>> list2 = ["abc", "ghi", "456", "789"]
>>> set1 = set(list1)
>>> [a for a in list2 if a not in set1]
['456', '789']
नोट तो क्या आप चाहते हैं लागू करने के लिए दोनों तेजी से और तुच्छ है यह आवश्यक है कि आइटम हर्षनीय हैं लेकिन ओ (एन) समय के करीब चलता है।
यदि आइटम हैंशबल नहीं हैं लेकिन वे ऑर्डर करने योग्य हैं तो आप सूची 1 को सॉर्ट कर सकते हैं और इसमें आइटम ढूंढने के लिए बाइनरी खोज का उपयोग कर सकते हैं। यह ओ (एन लॉग (एन)) समय देता है।
यदि आपके आइटम न तो हैंशबल योग्य नहीं हैं तो आपको प्रत्येक तत्व के लिए धीमी ओ (एन * एन) सरल रैखिक खोज का सहारा लेना होगा।
स्रोत
2010-04-24 22:52:05
यदि आपको डुप्लीकेट या ऑर्डर की परवाह नहीं है तो आपको 'सेट (array2) - सेट (array2) 'पर विचार करना चाहिए। – Jules