Python သည် sets များကို ကိုင်တွယ်သည့် built-in data အမျိုးအစား၊ set ကို ပေးပါသည်။
အမျိုးအစားအစုံသည် ထပ်တူမဟုတ်သောဒြပ်စင်များ (တန်ဖိုးတူမဟုတ်သောဒြပ်စင်များ၊ တစ်မူထူးခြားသောဒြပ်စင်များ) အစုအဝေးတစ်ခုဖြစ်ပြီး union set၊ ထုတ်ကုန်အစုံနှင့် ခြားနားချက်အစုံကဲ့သို့သော သတ်မှတ်လုပ်ဆောင်ချက်များကို လုပ်ဆောင်နိုင်သည်။
ဤကဏ္ဍတွင်၊ set-type set operations တွင် အခြေခံလုပ်ဆောင်မှုများကို နမူနာကုဒ်ဖြင့် ရှင်းပြထားသည်။
- အစုံအရာဝတ္ထုများဖန်တီးခြင်း။:
{}
၊set()
- inclusion notation သတ်မှတ်ပါ။
- အစုံရှိ အစိတ်အပိုင်း အရေအတွက်:
len()
- Set တစ်ခုသို့ Element တစ်ခုထည့်ခြင်း။:
add()
- အစုတစ်ခုမှ အစိတ်အပိုင်းတစ်ခုကို ဖယ်ရှားပါ။:
discard()
၊remove()
၊pop()
၊clear()
- Wasset (ပေါင်းစည်းခြင်း၊ ပြည်ထောင်စု)၊:|အော်ပရေတာ,
union()
- ကုန်ပစ္စည်းအစုံများ (အသုံးများသော အစိတ်အပိုင်းများ၊ လမ်းဆုံများ၊ လမ်းဆုံများ):& အော်ပရေတာ,
intersection()
- ဆွေမျိုးအဖြည့်:-အော်ပရေတာ,
difference()
- symmetry ခြားနားချက်အစုံ:^ အော်,
symmetric_difference()
- ခွဲထားသည်ဖြစ်စေ၊:<= အော်ပရေတာ,
issubset()
- အထက်ပိုင်းသတ်မှတ်သည်ဖြစ်စေ၊:>= အော်ပရေတာ,
issuperset()
- နှစ်ဦးနှစ်ဖက် အချုပ်အခြာဖြစ်ခြင်း ရှိ၊မရှိ ဆုံးဖြတ်ခြင်း။:
isdisjoint()
သတ်မှတ်အမျိုးအစားသည် ဒြပ်စင်များကို ပေါင်းထည့်နိုင်ပြီး ဖျက်နိုင်သော မပြောင်းလဲနိုင်သော အမျိုးအစားဖြစ်ပြီး တူညီသော လုပ်ဆောင်ချက်နှင့် သတ်မှတ်အမျိုးအစားကဲ့သို့ အခြားနည်းလမ်းများပါရှိသော frozenset အမျိုးအစားလည်း ရှိသော်လည်း မပြောင်းလဲနိုင် (ဒြပ်စင်များကို ထည့်ခြင်း၊ ဖျက်ခြင်း သို့မဟုတ် အခြားနည်းဖြင့် မွမ်းမံခြင်းမပြုနိုင်ပါ။ )
- သတ်မှတ်အရာဝတ္ထုကို ဖန်တီးခြင်း-:{}၊set()
- inclusion notation သတ်မှတ်ပါ။
- အစုံရှိ အစိတ်အပိုင်း အရေအတွက်:len()
- Set တစ်ခုသို့ Element တစ်ခုထည့်ခြင်း။:add()
- အစုတစ်ခုမှ အစိတ်အပိုင်းတစ်ခုကို ဖယ်ရှားပါ။:discard()၊remove()၊pop()၊clear()
- Wasset (ပေါင်းစည်းခြင်း၊ ပြည်ထောင်စု)၊:|အော်ပရေတာ,union()
- ကုန်ပစ္စည်းအစုံများ (အသုံးများသော အစိတ်အပိုင်းများ၊ လမ်းဆုံများ၊ လမ်းဆုံများ):& အော်ပရေတာ,intersection()
- ဆွေမျိုးအဖြည့်:-အော်ပရေတာ,difference()
- symmetry ခြားနားချက်အစုံ:^ အော်,symmetric_difference()
- ခွဲထားသည်ဖြစ်စေ၊:<= အော်ပရေတာ,issubset()
- အထက်ပိုင်းသတ်မှတ်သည်ဖြစ်စေ၊:>= အော်ပရေတာ,issuperset()
- နှစ်ဦးနှစ်ဖက် အချုပ်အခြာဖြစ်ခြင်း ရှိ၊မရှိ ဆုံးဖြတ်ခြင်း။:isdisjoint()
သတ်မှတ်အရာဝတ္ထုကို ဖန်တီးခြင်း-:{}၊set()
လှိုင်းကွင်းများ {} ဖြင့် ထုတ်လုပ်သည်
အကွက်များ {} တွင် ဒြပ်စင်များကို ထည့်သွင်းခြင်းဖြင့် အမျိုးအစားအစုံ၏ အရာဝတ္ထုများကို ဖန်တီးနိုင်သည်။
ထပ်နေသောတန်ဖိုးများရှိပါက ၎င်းတို့ကို လျစ်လျူရှုပြီး ထူးခြားသောတန်ဖိုးများသာ ဒြပ်စင်များအဖြစ် ကျန်ရှိနေပါသည်။
s = {1, 2, 2, 3, 1, 4}
print(s)
print(type(s))
# {1, 2, 3, 4}
# <class 'set'>
ဒြပ်စင်များအဖြစ် အမျိုးအစားအမျိုးမျိုးရှိနိုင်သည်။ သို့သော်လည်း စာရင်းအမျိုးအစားများကဲ့သို့သော ဒေတာမြှင့်တင်နိုင်သော အရာဝတ္ထုများကို စာရင်းသွင်း၍မရပါ။ Tuple များကိုခွင့်ပြုထားသည်။
ထို့အပြင် သတ်မှတ်အမျိုးအစားများကို စီစဥ်ထားခြင်းမရှိသောကြောင့် ၎င်းတို့ထုတ်လုပ်လိုက်သော အမှာစာများကို သိမ်းဆည်းမည်မဟုတ်ပါ။
s = {1.23, 'abc', (0, 1, 2), 'abc'}
print(s)
# {(0, 1, 2), 1.23, 'abc'}
# s = {[0, 1, 2]}
# TypeError: unhashable type: 'list'
int နှင့် float ကဲ့သို့ မတူညီသော အမျိုးအစားများကို ၎င်းတို့၏ တန်ဖိုးများ ညီမျှပါက ထပ်တူများဟု သတ်မှတ်သည်။
s = {100, 100.0}
print(s)
# {100}
ဗလာဘောင်စည်း {} ကို အဘိဓာန်အမျိုးအစားဟု ယူဆသောကြောင့်၊ နောက်တွင်ဖော်ပြထားသော constructor ကိုအသုံးပြု၍ ဗလာ set type object (empty set) ကို ဖန်တီးနိုင်သည်။
s = {}
print(s)
print(type(s))
# {}
# <class 'dict'>
constructor set() မှထုတ်ပေးသည်
အမျိုးအစားအစုံ၏ အရာဝတ္ထုများကိုလည်း constructor set() ဖြင့် ဖန်တီးနိုင်သည်။
အငြင်းအခုံအဖြစ် စာရင်းတစ်ခု သို့မဟုတ် tuple ကဲ့သို့ ထပ်တူကျနိုင်သော အရာတစ်ခုကို သတ်မှတ်ခြင်းသည် ပွားနေသောဒြပ်စင်များကို ဖယ်ထုတ်ထားခြင်းဖြင့် ဒြပ်စင်များကို သီးသန့်တန်ဖိုးများသာဖြစ်သည့် သတ်မှတ်အရာဝတ္တုကို ထုတ်ပေးသည်။
l = [1, 2, 2, 3, 1, 4]
print(l)
print(type(l))
# [1, 2, 2, 3, 1, 4]
# <class 'list'>
s_l = set(l)
print(s_l)
print(type(s_l))
# {1, 2, 3, 4}
# <class 'set'>
မပြောင်းလဲနိုင်သော frozenset အမျိုးအစားများကို constructor frozenset() ဖြင့် ဖန်တီးထားသည်။
fs_l = frozenset(l)
print(fs_l)
print(type(fs_l))
# frozenset({1, 2, 3, 4})
# <class 'frozenset'>
အငြင်းအခုံကို ချန်လှပ်ထားပါက၊ ဗလာ set-type object (empty set) ကို ဖန်တီးသည်။
s = set()
print(s)
print(type(s))
# set()
# <class 'set'>
set() ကို အသုံးပြု၍ မိတ္တူပွားနေသောဒြပ်စင်များကို စာရင်းတစ်ခု သို့မဟုတ် tuple မှ ဖယ်ရှားနိုင်သော်လည်း မူရင်းစာရင်း၏ အစီအစဥ်ကို ထိန်းသိမ်းမထားပါ။
သတ်မှတ်အမျိုးအစားတစ်ခုကို စာရင်းတစ်ခု သို့မဟုတ် tuple အဖြစ်သို့ ပြောင်းရန်၊ list(),tuple() ကိုသုံးပါ။
l = [2, 2, 3, 1, 3, 4]
l_unique = list(set(l))
print(l_unique)
# [1, 2, 3, 4]
အမှာစာကို ထိန်းသိမ်းထားစဉ်၊ ပွားနေသောဒြပ်စင်များကိုသာ ထုတ်ယူခြင်းနှင့် နှစ်ဘက်မြင် အခင်းအကျင်းတွင် ပွားနေသောဒြပ်စင်များကို လုပ်ဆောင်ခြင်းဆိုင်ရာ အချက်အလက်များအတွက် အောက်ပါဆောင်းပါးကို ကြည့်ပါ။
inclusion notation သတ်မှတ်ပါ။
စာရင်းနားလည်မှုများအပြင် သတ်မှတ်နားလည်နိုင်စွမ်းများလည်း ရှိပါသည်။ စာရင်းနားလည်မှုများတွင် လေးထောင့်ကွင်းစကွက်များ [] ကို ကွင်းကောက်များ {} ဖြင့် အစားထိုးပါ။
s = {i**2 for i in range(5)}
print(s)
# {0, 1, 4, 9, 16}
စာရင်းနားလည်မှုမှတ်စုဆိုင်ရာ နောက်ထပ်အချက်အလက်များအတွက် အောက်ပါဆောင်းပါးကို ကြည့်ပါ။
အစုံရှိ အစိတ်အပိုင်း အရေအတွက်:len()
တပ်ဆင်ထားသောလုပ်ဆောင်ချက် len() ဖြင့် set တစ်ခုရှိ element အရေအတွက်ကို ရယူနိုင်ပါသည်။
s = {1, 2, 2, 3, 1, 4}
print(s)
print(len(s))
# {1, 2, 3, 4}
# 4
ပွားနေသောတန်ဖိုးများ စသည်တို့ပါရှိသော စာရင်းတစ်ခုစီရှိ ဒြပ်စင်အရေအတွက်ကို ရေတွက်လိုပါက အောက်ပါဆောင်းပါးကို ကြည့်ပါ။
Set တစ်ခုသို့ Element တစ်ခုထည့်ခြင်း။:add()
အစိတ်အပိုင်းတစ်ခုအား set တစ်ခုသို့ထည့်ရန် add() method ကိုသုံးပါ။
s = {0, 1, 2}
s.add(3)
print(s)
# {0, 1, 2, 3}
အစုတစ်ခုမှ အစိတ်အပိုင်းတစ်ခုကို ဖယ်ရှားပါ။:discard()၊remove()၊pop()၊clear()
set တစ်ခုမှ အစိတ်အပိုင်းတစ်ခုကို ဖယ်ရှားရန်၊ discard(), remove(), pop(), နှင့် clear() နည်းလမ်းများကို အသုံးပြုပါ။
discard() method သည် argument တွင် သတ်မှတ်ထားသော element ကို ဖျက်သည်။ set တွင်မရှိသောတန်ဖိုးကိုသတ်မှတ်ပါကဘာမျှလုပ်ဆောင်မည်မဟုတ်ပါ။
s = {0, 1, 2}
s.discard(1)
print(s)
# {0, 2}
s = {0, 1, 2}
s.discard(10)
print(s)
# {0, 1, 2}
remove() method သည် argument တွင်ဖော်ပြထားသော element ကိုလည်းဖယ်ရှားသည်၊ သို့သော် set တွင်မရှိသောတန်ဖိုးကိုသတ်မှတ်ထားပါက Key Error သည်ပြန်လာလိမ့်မည်။
s = {0, 1, 2}
s.remove(1)
print(s)
# {0, 2}
# s = {0, 1, 2}
# s.remove(10)
# KeyError: 10
pop() method သည် set တစ်ခုမှ element များကိုဖယ်ရှားပြီး ၎င်းတို့၏တန်ဖိုးများကို ပြန်ပေးသည်။ မည်သည့်တန်ဖိုးများကို ဖယ်ရှားရမည်ကို ရွေးချယ်ရန် မဖြစ်နိုင်ပါ။ ဗလာအစုံသည် KeyError အမှားဖြစ်သွားလိမ့်မည်။
s = {2, 1, 0}
v = s.pop()
print(s)
print(v)
# {1, 2}
# 0
s = {2, 1, 0}
print(s.pop())
# 0
print(s.pop())
# 1
print(s.pop())
# 2
# print(s.pop())
# KeyError: 'pop from an empty set'
clear() method သည် element အားလုံးကိုဖယ်ရှားပြီး set ကို ဗလာဖြစ်စေသည်။
s = {0, 1, 2}
s.clear()
print(s)
# set()
Wasset (ပေါင်းစည်းခြင်း၊ ပြည်ထောင်စု)၊:|အော်ပရေတာ,union()
union set (ပေါင်းစည်းခြင်း၊ union) ဖြင့် ရယူနိုင်ပါသည်။ အော်ပရေတာ သို့မဟုတ် union() နည်းလမ်း။
s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}
s_union = s1 | s2
print(s_union)
# {0, 1, 2, 3}
s_union = s1.union(s2)
print(s_union)
# {0, 1, 2, 3}
နည်းလမ်းတစ်ခုအတွက် အကြောင်းပြချက်များစွာကို သတ်မှတ်နိုင်သည်။ သတ်မှတ်အမျိုးအစားအပြင်၊ set() ဖြင့် သတ်မှတ်အမျိုးအစားသို့ ပြောင်းလဲနိုင်သော စာရင်းများနှင့် tuple များကို အကြောင်းပြချက်များအဖြစ် သတ်မှတ်နိုင်သည်။ နောက်ဆက်တွဲ အော်ပရေတာများနှင့် နည်းလမ်းများနှင့် အကျုံးဝင်ပါသည်။
s_union = s1.union(s2, s3)
print(s_union)
# {0, 1, 2, 3, 4}
s_union = s1.union(s2, [5, 6, 5, 7, 5])
print(s_union)
# {0, 1, 2, 3, 5, 6, 7}
ကုန်ပစ္စည်းအစုံများ (အသုံးများသော အစိတ်အပိုင်းများ၊ လမ်းဆုံများ၊ လမ်းဆုံများ):& အော်ပရေတာ,intersection()
ထုတ်ကုန်အစုံ (ဘုံအပိုင်း၊ လမ်းဆုံနှင့် လမ်းဆုံ) ကို & အော်ပရေတာ သို့မဟုတ် လမ်းဆုံ() နည်းလမ်း။
s_intersection = s1 & s2
print(s_intersection)
# {1, 2}
s_intersection = s1.intersection(s2)
print(s_intersection)
# {1, 2}
s_intersection = s1.intersection(s2, s3)
print(s_intersection)
# {2}
ဆွေမျိုးအဖြည့်:-အော်ပရေတာ,difference()
သတ်မှတ်ခြားနားချက်ကို – အော်ပရေတာ သို့မဟုတ် ခြားနားချက်() နည်းလမ်းဖြင့် ရယူနိုင်သည်။
s_difference = s1 - s2
print(s_difference)
# {0}
s_difference = s1.difference(s2)
print(s_difference)
# {0}
s_difference = s1.difference(s2, s3)
print(s_difference)
# {0}
symmetry ခြားနားချက်အစုံ:^ အော်,symmetric_difference()
စီမက်ထရစ်ခြားနားချက်သတ်မှတ်မှု (နှစ်ခုအနက်တစ်ခုသာပါရှိသော ဒြပ်စင်အစုအဝေး) ကို ^အော်ပရေတာ သို့မဟုတ် symmetric_difference() ဖြင့် ရယူနိုင်သည်။
ယုတ္တိရှိသော လုပ်ဆောင်ချက်များတွင် သီးသန့်ခွဲထွက်ခြင်း (XOR) နှင့် ညီမျှသည်။
s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}
s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}
ခွဲထားသည်ဖြစ်စေ၊:<= အော်ပရေတာ,issubset()
set တစ်ခုသည် အခြား set တစ်ခု၏ ခွဲဆက်တစ်ခု ဟုတ်မဟုတ် ဆုံးဖြတ်ရန်၊ <= operator သို့မဟုတ် issubset() method ကို အသုံးပြုပါ။
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s1 <= s2)
# True
print(s1.issubset(s2))
# True
<= အော်ပရေတာနှင့် issubset() နည်းလမ်းနှစ်ခုလုံးသည် ညီမျှသောအတွဲများအတွက် မှန်ပါသည်။
၎င်းသည် စစ်မှန်သောအစုခွဲတစ်ခုဟုတ်မဟုတ် ဆုံးဖြတ်ရန်၊ ညီမျှသောအတွဲများအတွက် false ပြန်ပေးသည့် <= အော်ပရေတာကို အသုံးပြုပါ။
print(s1 <= s1)
# True
print(s1.issubset(s1))
# True
print(s1 < s1)
# False
အထက်ပိုင်းသတ်မှတ်သည်ဖြစ်စေ၊:>= အော်ပရေတာ,issuperset()
တစ်ခုသည် အခြားတစ်ခု၏ superset ဖြစ်မဖြစ် ဆုံးဖြတ်ရန် >= အော်ပရေတာ သို့မဟုတ် issuperset() ကို အသုံးပြုပါ။
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s2 >= s1)
# True
print(s2.issuperset(s1))
# True
>= အော်ပရေတာနှင့် issuperset() နည်းလမ်းနှစ်ခုလုံးသည် ညီမျှသောအတွဲများအတွက် မှန်ပါသည်။
၎င်းသည် စစ်မှန်သောစူပါဆက်ဆက်ဟုတ်မဟုတ် ဆုံးဖြတ်ရန်၊ ညီမျှသောအတွဲများအတွက် false ပြန်ပေးသည့် >= အော်ပရေတာကို အသုံးပြုပါ။
print(s1 >= s1)
# True
print(s1.issuperset(s1))
# True
print(s1 > s1)
# False
နှစ်ဦးနှစ်ဖက် အချုပ်အခြာဖြစ်ခြင်း ရှိ၊မရှိ ဆုံးဖြတ်ခြင်း။:isdisjoint()
အစုံနှစ်ခုသည် တစ်ခုနှင့်တစ်ခု တူညီမှုရှိမရှိ ဆုံးဖြတ်ရန် isdisjoint() method ကို အသုံးပြုပါ။
s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}
print(s1.isdisjoint(s2))
# False
print(s1.isdisjoint(s3))
# True