यह निर्धारित करना कि क्या किसी सूची (सरणी) में पायथन में डुप्लिकेट तत्व हैं

व्यापार

निम्नलिखित में से प्रत्येक मामले के लिए पायथन में एक सूची (सरणी) में डुप्लिकेट तत्व (सभी तत्व अद्वितीय/अद्वितीय हैं) निर्धारित करने के तरीके का विवरण निम्नलिखित है।

  • उस सूची के लिए जिसमें तत्व में कोई सूची नहीं है
  • तत्वों की सूची वाली सूचियों के लिए (द्वि-आयामी सरणियाँ, सूचियों की सूचियाँ, आदि)

किसी सूची से डुप्लिकेट तत्वों को निकालने या निकालने के तरीके पर निम्न आलेख देखें।

ध्यान दें कि सूचियां विभिन्न प्रकार के डेटा को स्टोर कर सकती हैं और सरणियों से बिल्कुल अलग हैं। यदि आप उन प्रक्रियाओं में सरणियों को संभालना चाहते हैं जिनके लिए स्मृति आकार और स्मृति पते या बड़े डेटा की संख्यात्मक प्रसंस्करण की आवश्यकता होती है, तो सरणी (मानक पुस्तकालय) या NumPy का उपयोग करें।

निर्धारित करें कि क्या सूची में डुप्लिकेट तत्व हैं (यदि तत्व की कोई सूची नहीं है)

यदि तत्व में सूची जैसी अद्यतन योग्य वस्तु नहीं है, तो सेट सेट प्रकार के कंस्ट्रक्टर सेट () का उपयोग करें।

सेट प्रकार एक डेटा प्रकार है जिसमें कोई डुप्लिकेट तत्व नहीं होते हैं। जब एक सूची कंस्ट्रक्टर सेट () को पास की जाती है, तो डुप्लिकेट मानों को अनदेखा कर दिया जाता है और प्रकार की एक वस्तु केवल अद्वितीय मानों के साथ सेट की जाती है क्योंकि तत्व वापस आ जाते हैं।

इस सेट प्रकार ऑब्जेक्ट में तत्वों की संख्या और मूल सूची प्राप्त की जाती है और अंतर्निहित फ़ंक्शन लेन () का उपयोग करके तुलना की जाती है।

  • यदि तत्वों की संख्या समान है, तो मूल सूची में कोई डुप्लिकेट तत्व नहीं हैं
  • तत्वों की संख्या भिन्न होने पर डुप्लिकेट तत्वों को मूल सूची में शामिल किया जाता है

यदि कोई डुप्लिकेट तत्व नहीं हैं, तो फ़ंक्शन जो गलत लौटाता है और यदि डुप्लिकेट तत्व हैं, तो सत्य इस प्रकार है

def has_duplicates(seq):
    return len(seq) != len(set(seq))

l = [0, 1, 2]
print(has_duplicates(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates(l))
# True

उदाहरण एक सूची है, लेकिन उसी फ़ंक्शन का उपयोग टुपल्स के साथ किया जा सकता है।

परिवर्तनीय (अद्यतन करने योग्य) वस्तुएं जैसे सूचियां सेट प्रकार के तत्व नहीं हो सकती हैं। इसलिए, तत्वों के रूप में सूचियों वाली सूचियाँ (द्वि-आयामी सरणियाँ, सूचियों की सूचियाँ, आदि) के परिणामस्वरूप एक TypeError होगा। प्रतिवाद नीचे दिखाया गया है।

l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]]
# print(has_duplicates(l_2d))
# TypeError: unhashable type: 'list'

निर्धारित करें कि क्या सूची में डुप्लिकेट तत्व हैं (यदि तत्व की सूची है)

तत्वों की सूची (जैसे सूचियों की सूची) वाली सूची के मामले में, निम्नलिखित कार्यों का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि क्या डुप्लिकेट तत्व हैं।

def has_duplicates2(seq):
    seen = []
    unique_list = [x for x in seq if x not in seen and not seen.append(x)]
    return len(seq) != len(unique_list)

l_2d = [[0, 0], [0, 1], [1, 1], [1, 0]]
print(has_duplicates2(l_2d))
# False

l_2d = [[0, 0], [0, 1], [1, 1], [1, 1]]
print(has_duplicates2(l_2d))
# True

सेट () के बजाय, सूची समझ संकेतन एक सूची उत्पन्न करता है जिसके तत्व केवल अद्वितीय मान होते हैं, और तत्वों की संख्या की तुलना की जाती है। विवरण के लिए निम्न आलेख देखें।

यह फ़ंक्शन उन सूचियों के लिए भी मान्य है जिनमें तत्वों की सूची नहीं है।

l = [0, 1, 2]
print(has_duplicates2(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates2(l))
# True

अब तक का उदाहरण यह निर्धारित करना है कि क्या तत्वों की सूची को डुप्लिकेट किया गया है (इसमें एक ही सूची है)।

मूल सूची को एक आयाम में समतल करने के बाद प्रत्येक सूची ओवरलैप के तत्वों का निर्धारण किया जा सकता है या नहीं।

l_2d = [[0, 1], [2, 3]]
print(sum(l_2d, []))
# [0, 1, 2, 3]

print(has_duplicates(sum(l_2d, [])))
# False

l_2d = [[0, 1], [2, 0]]
print(has_duplicates(sum(l_2d, [])))
# True

यहां, सूची को समतल करने के लिए योग () का उपयोग किया जाता है, लेकिन itertools.chain.from_iterable() का भी उपयोग किया जा सकता है। इसके अलावा, तीन या अधिक आयामों की सूची को समतल करते समय, एक नए फ़ंक्शन को परिभाषित करना आवश्यक है।