पाइथनमा सूची (एरे) मा नक्कल तत्वहरू (सबै तत्वहरू अद्वितीय/अद्वितीय छन्) छन् कि छैनन् भनेर कसरी निर्धारण गर्ने भन्ने ’bout निम्न विवरणहरू छन्।
- तत्वमा कुनै सूची नभएको सूचीको लागि
- तत्वहरूको सूची भएका सूचीहरूको लागि (दुई-आयामी एरेहरू, सूचीहरूको सूचीहरू, आदि)
सूचीबाट डुप्लिकेट तत्वहरू कसरी हटाउने वा निकाल्ने भन्ने ’bout निम्न लेख हेर्नुहोस्।
नोट गर्नुहोस् कि सूचीहरूले विभिन्न प्रकारका डेटा भण्डारण गर्न सक्छ र एरेहरू भन्दा कडा रूपमा फरक छन्। यदि तपाइँ प्रक्रियाहरूमा एरेहरू ह्यान्डल गर्न चाहनुहुन्छ जुन मेमोरी साइज र मेमोरी ठेगानाहरू वा ठूलो डाटाको संख्यात्मक प्रशोधन आवश्यक पर्दछ, एरे (मानक पुस्तकालय) वा NumPy प्रयोग गर्नुहोस्।
यदि सूचीमा नक्कल तत्वहरू छन् भने निर्धारण गर्नुहोस् (यदि तत्वसँग कुनै सूची छैन)
यदि तत्वसँग अद्यावधिक गर्न मिल्ने वस्तु जस्तै सूची छैन भने, सेट सेट प्रकारको कन्स्ट्रक्टर सेट() प्रयोग गर्नुहोस्।
सेट प्रकार एक डेटा प्रकार हो जसमा कुनै नक्कल तत्वहरू छैनन्। जब कन्स्ट्रक्टर सेट() मा सूची पास गरिन्छ, डुप्लिकेट मानहरूलाई बेवास्ता गरिन्छ र तत्वहरूको रूपमा मात्र अद्वितीय मानहरूसँग सेट गरिएको प्रकारको वस्तु फिर्ता गरिन्छ।
यस सेट प्रकारको वस्तुमा तत्वहरूको संख्या र मूल सूची प्राप्त गरिन्छ र बिल्ट-इन प्रकार्य len() प्रयोग गरेर तुलना गरिन्छ।
- यदि तत्वहरूको संख्या बराबर छ भने, मूल सूचीमा कुनै नक्कल तत्वहरू छैनन्
- यदि तत्वहरूको संख्या फरक छ भने डुप्लिकेट तत्वहरूलाई मूल सूचीमा समावेश गरिन्छ
डुप्लिकेट तत्वहरू नभएको खण्डमा गलत फर्काउने कार्यहरू र नक्कल तत्वहरू भएमा सत्य निम्नानुसार छन्
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
उदाहरण एक सूची हो, तर समान प्रकार्य tuples संग प्रयोग गर्न सकिन्छ।
म्युटेबल (अपडेट गर्न मिल्ने) वस्तुहरू जस्तै सूचीहरू सेट प्रकारका तत्वहरू हुन सक्दैनन्। तसर्थ, तत्वहरू (दुई-आयामी एरेहरू, सूचीहरूको सूचीहरू, आदि) को रूपमा सूचीहरू सहितको सूचीले 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
Set() को सट्टा, सूची बुझाइ सङ्केतले एउटा सूची उत्पन्न गर्छ जसको तत्वहरू मात्र अद्वितीय मानहरू हुन्, र तत्वहरूको संख्या तुलना गरिएको छ। विवरणका लागि निम्न लेख हेर्नुहोस्।
यो प्रकार्य तत्वहरूको सूची नभएको सूचीहरूको लागि पनि मान्य छ।
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
यहाँ, सूची समतल गर्न sum() प्रयोग गरिन्छ, तर itertools.chain.from_iterable() पनि प्रयोग गर्न सकिन्छ। थप रूपमा, तीन वा बढी आयामहरूको सूची सपाट गर्दा, नयाँ प्रकार्य परिभाषित गर्न आवश्यक छ।


