အောက်ပါကိစ္စရပ်တစ်ခုစီအတွက် စာရင်း (array) တွင် ထပ်နေသောဒြပ်စင်များ (ဒြပ်စင်များအားလုံးသည် Python တွင် တစ်မူထူးခြားခြင်း/ထူးခြားသည်) ရှိ၊ မရှိ ဆုံးဖြတ်နည်း၏ ဖော်ပြချက်ဖြစ်သည်။
- ဒြပ်စင်တွင် စာရင်းမရှိသောစာရင်းတစ်ခုအတွက်
- ဒြပ်စင်များစာရင်းများပါရှိသောစာရင်းများ (နှစ်ဘက်မြင် arrays၊ စာရင်းများစာရင်းများ စသည်ဖြင့်)
စာရင်းတစ်ခုမှ ထပ်နေသောဒြပ်စင်များကို ဖယ်ရှားနည်း သို့မဟုတ် ထုတ်ယူနည်းဆိုင်ရာ အောက်ပါဆောင်းပါးကို ကြည့်ပါ။
စာရင်းများသည် မတူညီသောဒေတာအမျိုးအစားများကို သိမ်းဆည်းနိုင်ပြီး array များနှင့် တင်းကြပ်စွာကွဲပြားသည်ကို သတိပြုပါ။ မန်မိုရီအရွယ်အစားနှင့် မမ်မိုရီလိပ်စာများ သို့မဟုတ် ကြီးမားသောဒေတာ၏ ကိန်းဂဏာန်းလုပ်ဆောင်မှု လိုအပ်သည့် လုပ်ငန်းစဉ်များတွင် ခင်းကျင်းမှုများကို ကိုင်တွယ်လိုပါက၊ ခင်းကျင်းမှု (စံပြစာကြည့်တိုက်) သို့မဟုတ် NumPy ကို အသုံးပြုပါ။
စာရင်းထဲတွင် ထပ်နေသောဒြပ်စင်များ ရှိ၊ မရှိ ဆုံးဖြတ်ပါ (ဒြပ်စင်တွင် စာရင်းမရှိပါက)
ဒြပ်စင်တွင် စာရင်းကဲ့သို့သော ဒေတာကို မြှင့်တင်နိုင်သော အရာဝတ္တုတစ်ခု မရှိပါက၊ set set type ၏ constructor set() ကို အသုံးပြုပါ။
သတ်မှတ်အမျိုးအစားသည် ထပ်နေသောဒြပ်စင်များမရှိသော ဒေတာအမျိုးအစားဖြစ်သည်။ စာရင်းတစ်ခုကို constructor set() သို့ ပေးပို့သောအခါ၊ ထပ်နေသောတန်ဖိုးများကို လျစ်လျူရှုပြီး ဒြပ်စင်များအဖြစ် သီးခြားတန်ဖိုးများသာရှိသော အမျိုးအစားသတ်မှတ်ထားသော အရာဝတ္ထုတစ်ခုကို ပြန်ပို့ပေးပါသည်။
ဤ set type object မှ element အရေအတွက်နှင့် original list ကို ရရှိပြီး built-in function len() ကို အသုံးပြု၍ နှိုင်းယှဉ်ပါသည်။
- ဒြပ်စင်အရေအတွက် တူညီပါက မူရင်းစာရင်းတွင် ထပ်နေသောဒြပ်စင်များ မရှိပါ။
- ဒြပ်စင်အရေအတွက် မတူညီပါက ပွားနေသောဒြပ်စင်များကို မူရင်းစာရင်းတွင် ထည့်သွင်းပါသည်။
ပွားနေသောဒြပ်စင်များမရှိလျှင် false ပြန်ပေးသည့်လုပ်ဆောင်ချက်များနှင့် ပွားနေသောဒြပ်စင်များရှိပါက အောက်ပါအတိုင်းဖြစ်သည်။
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 ဖြင့် အသုံးပြုနိုင်သည်။
စာရင်းများကဲ့သို့သော ပြောင်းလဲနိုင်သော (updateable) အရာဝတ္ထုများသည် သတ်မှတ်အမျိုးအစား၏ အစိတ်အပိုင်းများ မဖြစ်နိုင်ပါ။ ထို့ကြောင့်၊ ဒြပ်စင်များအဖြစ် စာရင်းများပါရှိသော စာရင်းများ (နှစ်ဘက်မြင် အခင်းအကျင်းများ၊ စာရင်းများ စသည်ဖြင့်) သည် 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() အစား list comprehension notation သည် သီးသန့်တန်ဖိုးများသာရှိသော element များကိုထုတ်ပေးပြီး element အရေအတွက်ကို နှိုင်းယှဉ်ပါသည်။ အသေးစိတ်အတွက် အောက်ပါဆောင်းပါးကို ကြည့်ပါ။
ဤလုပ်ဆောင်ချက်သည် ဒြပ်စင်များစာရင်းမရှိသော စာရင်းများအတွက်လည်း အကျုံးဝင်ပါသည်။
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() ကိုလည်း အသုံးပြုနိုင်ပါသည်။ ထို့အပြင်၊ အတိုင်းအတာသုံးခု သို့မဟုတ် ထို့ထက်ပိုသော အတိုင်းအတာများစာရင်းကို အပြားလိုက်လုပ်သောအခါ၊ လုပ်ဆောင်ချက်အသစ်တစ်ခုကို သတ်မှတ်ရန် လိုအပ်သည်။