क्या यह जांचने का एक तेज़ तरीका है कि क्या एक सेट में पूरी तरह से दूसरा है?
कुछ इस तरह:
>>>[1, 2, 3].containsAll([2, 1])
True
>>>[1, 2, 3].containsAll([3, 5, 9])
False
जवाबों:
वे सूचियाँ हैं, लेकिन अगर आप वास्तव में सेट का मतलब है कि आप issubset विधि का उपयोग कर सकते हैं।
>>> s = set([1,2,3])
>>> t = set([1,2])
>>> t.issubset(s)
True
>>> s.issuperset(t)
True
एक सूची के लिए, आप प्रत्येक तत्व की जांच करने से बेहतर नहीं कर पाएंगे।
issubset()
है नहींcontains()
पूर्णता के लिए: यह समतुल्य है issubset
(हालाँकि यकीनन थोड़ा कम स्पष्ट / पठनीय है):
>>> set([1,2,3]) >= set([2,1])
True
>>> set([1,2,3]) >= set([3,5,9])
False
एक विकल्प अछूता रह गया है - घटाव:
>>> {1, 2} - {1, 2, 3}
set([])
>>> {1, 2, 3} - {1, 2}
set([3])
मूल रूप से आप जांचते हैं कि पहली सूची में कौन से तत्व दूसरी सूची में नहीं हैं।
मुझे यह बहुत आसान लगा क्योंकि आप दिखा सकते हैं कि क्या मूल्य गायब हैं:
>>> def check_contains(a, b):
... diff = a - b
... if not diff:
... # All elements from a are present in b
... return True
... print('Some elements are missing: {}'.format(diff))
... return False
...
>>> check_contains({1, 2}, {1, 2, 3})
True
>>> check_contains({1, 2, 3}, {1, 2})
Some elements are missing: set([3])
False
आप set.issubset()
या तो set.issuperset()
(या उनके ऑपरेटर आधारित समकक्षों का उपयोग कर सकते हैं : <=
और >=
)। ध्यान दें कि विधियां किसी भी तर्क को एक तर्क के रूप में स्वीकार करेंगी , न कि केवल एक सेट के लिए:
>>> {1, 2}.issubset([1, 2, 3])
True
>>> {1, 2, 3}.issuperset([1, 2])
True
हालाँकि, यदि आप ऑपरेटरों का उपयोग करते हैं, तो दोनों तर्क सेट होने चाहिए:
>>> {1, 2} <= {1, 2, 3}
True
>>> {1, 2, 3} >= {1, 2}
True
यदि आपको किसी सेट पर दूसरे का उपसमूह होने का संदेह है, और उन दो सेटों को एक साथ जोड़ते हैं, तो इसका परिणाम स्वयं के बराबर है यदि यह सबसेट है।
a = [2,1,3,3]
b = [5,4,3,2,1]
set(a).intersection(set(b)) == set(a)
>>True
A = set(a)
और B = set(b)
पवित्रता के लिए। तब यह तुलना कुशलता से की जाती है len(A.intersection(B)) == len(A)
। यही है, सेटों को स्वयं तत्व-वार की तुलना करने की आवश्यकता नहीं है; केवल इन सेटों की कार्डिनैलिटी की तुलना की जानी चाहिए। हालांकि इस अनुकूलन को इस दृष्टिकोण को प्राथमिकता देने के लिए संभवतः अपर्याप्त है, हालांकि। नाटकीय रूप से अधिक पठनीय और कुशल issubset()
और <=
दृष्टिकोण लगभग निश्चित रूप से हर कोई चाहता है।
यदि फ़ंक्शनलिस्ट में पूर्णांक शामिल नहीं है, तो फ़ंक्शन वापसी 0 से नीचे है और यदि पूरी तरह से 1 शामिल है।
def islistsubset(sublist,mainlist):
for item in sublist:
if item in mainlist:
contains = 1
else:
contains = 0
break;
return contains
any(item in mainlist for item in sublist)
।