مندرجہ ذیل میں اس بات کی وضاحت ہے کہ آیا کسی فہرست (سری) میں مندرجہ ذیل میں سے ہر ایک کیس کے لیے Python میں ڈپلیکیٹ عناصر (تمام عناصر منفرد/منفرد) ہیں یا نہیں۔
- ایک فہرست کے لیے جس میں عنصر میں کوئی فہرست نہیں ہے۔
- عناصر کی فہرستوں والی فہرستوں کے لیے (دو جہتی صفیں، فہرستوں کی فہرستیں وغیرہ)
فہرست سے ڈپلیکیٹ عناصر کو ہٹانے یا نکالنے کے بارے میں درج ذیل مضمون کو دیکھیں۔
نوٹ کریں کہ فہرستیں مختلف قسم کے ڈیٹا کو محفوظ کر سکتی ہیں اور صفوں سے بالکل مختلف ہیں۔ اگر آپ ایسے پراسیس میں صفوں کو ہینڈل کرنا چاہتے ہیں جن کے لیے میموری کا سائز اور میموری ایڈریسز یا بڑے ڈیٹا کی عددی پروسیسنگ کی ضرورت ہوتی ہے، تو array (معیاری لائبریری) یا 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 کے ساتھ استعمال کیا جا سکتا ہے۔
تغیر پذیر (اپ ڈیٹ کے قابل) اشیاء جیسے فہرستیں قسم کے سیٹ کے عناصر نہیں ہوسکتی ہیں۔ لہذا، فہرستوں کے ساتھ فہرستیں بطور عناصر (دو جہتی صفوں، فہرستوں کی فہرستیں، وغیرہ) کے نتیجے میں ٹائپ ایرر ہو گا۔ جوابی اقدام ذیل میں دکھایا گیا ہے۔
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
یہاں، sum() فہرست کو ہموار کرنے کے لیے استعمال کیا جاتا ہے، لیکن itertools.chain.from_iterable() بھی استعمال کیا جا سکتا ہے۔ اس کے علاوہ، تین یا زیادہ جہتوں کی فہرست کو چپٹا کرتے وقت، ایک نئے فنکشن کی وضاحت کرنا ضروری ہے۔


