उदाहरण के लिए, मेरे पास दो सूचियाँ हैं
A = [6, 7, 8, 9, 10, 11, 12]
subset_of_A = [6, 9, 12]; # the subset of A
the result should be [7, 8, 10, 11]; the remaining elements
क्या ऐसा करने के लिए अजगर में एक अंतर्निहित कार्य है?
जवाबों:
यदि आदेश महत्वपूर्ण नहीं है, तो आपको उपयोग करना चाहिए set.difference
। हालाँकि, यदि आप ऑर्डर को बनाए रखना चाहते हैं, तो एक साधारण सूची की समझ है।
result = [a for a in A if a not in subset_of_A]
EDIT: जैसा कि डेलन का कहना है, अगर सूची के लिए O (n) की तुलना में, O (1) में सदस्यता की जाँच के बाद से प्रदर्शन में काफी सुधार होगा, तो subset_of_A
यह वास्तविक है ।set
set
A = [6, 7, 8, 9, 10, 11, 12]
subset_of_A = set([6, 9, 12]) # the subset of A
result = [a for a in A if a not in subset_of_A]
नहीं, ऐसा करने के लिए अजगर में कोई फ़ंक्शन नहीं है, क्योंकि बस:
set(A)- set(subset_of_A)
आपको उत्तर प्रदान करेगा।
set(A)-set(subset_of_A)
आपका इच्छित परिणाम सेट करता है, लेकिन यह मूल आदेश को बरकरार नहीं रखेगा। निम्नलिखित क्रम संरक्षण है:
[a for a in A if not a in subset_of_A]
यह सिर्फ एक दो दिन पहले पूछा गया था (लेकिन मुझे यह नहीं मिला):
>>> A = [6, 7, 8, 9, 10, 11, 12]
>>> subset_of_A = set([6, 9, 12])
>>> [i for i in A if i not in subset_of_A]
[7, 8, 10, 11]
set
संदर्भ के आधार पर, शुरुआत से ही इसका उपयोग करना बेहतर हो सकता है। फिर आप अन्य जवाब दिखाने जैसे सेट ऑपरेशन का उपयोग कर सकते हैं ।
हालाँकि, सूची को केवल इन ऑपरेशनों के लिए सेट और बैक में परिवर्तित करना सूची समझ से धीमा है।
Set
प्रकार का उपयोग करें :
A_set = Set([6,7,8,9,10,11,12])
subset_of_A_set = Set([6,9,12])
result = A_set - subset_of_A_set
>>> A = [6, 7, 8, 9, 10, 11, 12]
>>> subset_of_A = [6, 9, 12];
>>> set(A) - set(subset_of_A)
set([8, 10, 11, 7])
>>>
subset_of_A
वास्तविक रूप से बेहतर बनाया जा सकता हैset
, जोO(1)
सदस्यता परीक्षण देता है (O(n)
सूचियों के बजाय )।