အချို့သောအခြေအနေများကို ကျေနပ်စေသော စာကြောင်းများ၏ဒြပ်စင်များကိုသာ ထုတ်ယူခြင်းဖြင့် သို့မဟုတ် အစားထိုးခြင်း၊ ပြောင်းလဲခြင်းစသည်တို့ကို လုပ်ဆောင်ခြင်းဖြင့်၊ စာရင်းနားလည်မှုများကို အသုံးပြု၍ စာရင်း (array) တစ်ခု၏ စာရင်း (array) တစ်ခုမှ စာရင်းအသစ်တစ်ခုကို ထုတ်ပေးရန်၊ စာရင်းနားလည်မှုများကို အသုံးပြုပါ။
စာရင်းနားလည်မှုအတိုချုံးရှင်းလင်းချက်ပြီးနောက်၊ အောက်ပါအကြောင်းအရာများကို နမူနာကုဒ်ဖြင့် ရှင်းပြထားသည်။
- သတ်သတ်မှတ်မှတ် စာကြောင်းများ ပါဝင်ခြင်း ရှိ၊ မရှိအပေါ် အခြေခံ၍ ထုတ်ယူခြင်း (တစ်စိတ်တစ်ပိုင်း ကိုက်ညီမှု)
- သီးခြားစာတန်းကို အစားထိုးပါ။
- သီးခြားစာတန်းတစ်ခုဖြင့် စတင်ခြင်း သို့မဟုတ် မစတင်ခြင်းဖြင့် ထုတ်ယူပါ။
- သတ်သတ်မှတ်မှတ်စာကြောင်းဖြင့် အဆုံးသတ်ခြင်း သို့မဟုတ် အဆုံးမသတ်ဘဲ ဖြည်ပါ။
- အမှုဖြင့် စီရင်ဆုံးဖြတ်ခဲ့သည်။
- စာလုံးအကြီးနှင့် အသေးကို ပြောင်းပါ။
- အက္ခရာစဉ် သို့မဟုတ် ဂဏန်းအက္ခရာများကို အသုံးပြုခြင်းရှိမရှိ ဆုံးဖြတ်ပြီး ၎င်းတို့ကို ထုတ်ယူပါ။
- အခြေအနေမျိုးစုံ
- (ကွန်ပျူတာ) ပုံမှန်အသုံးအနှုန်း
စာရင်းများသည် မတူညီသောဒေတာအမျိုးအစားများကို သိမ်းဆည်းနိုင်ပြီး array များနှင့် တင်းကြပ်စွာကွဲပြားသည်ကို သတိပြုပါ။ မန်မိုရီအရွယ်အစားနှင့် မမ်မိုရီလိပ်စာများ သို့မဟုတ် ကြီးမားသောဒေတာ၏ ကိန်းဂဏာန်းလုပ်ဆောင်မှု လိုအပ်သည့် လုပ်ငန်းစဉ်များတွင် ခင်းကျင်းမှုများကို ကိုင်တွယ်လိုပါက၊ ခင်းကျင်းမှု (စံပြစာကြည့်တိုက်) သို့မဟုတ် NumPy ကို အသုံးပြုပါ။
- စာရင်းတွင် ပါဝင်သော အမှတ်အသား
- သီးခြားစာတန်းတစ်ခုပါရှိသည် (တစ်စိတ်တစ်ပိုင်းကိုက်ညီမှု) \ မပါဝင်ပါ။:in
- သီးခြားစာတန်းကို အစားထိုးပါ။
- သတ်သတ်မှတ်မှတ် စာကြောင်းတစ်ခုနှင့် စတင်သည် \ မစတင်ပါ။:startswith()
- သတ်သတ်မှတ်မှတ် စာလုံး string ဖြင့် အဆုံးသတ်သည် \ မဆုံးပါ။:endswith()
- အမှုဖြင့် စီရင်ဆုံးဖြတ်ခဲ့သည်။
- စာလုံးအကြီးနှင့် အသေးကို ပြောင်းပါ။
- အက္ခရာစဉ် သို့မဟုတ် ဂဏန်းအက္ခရာများကို အသုံးပြုခြင်းရှိမရှိ ဆုံးဖြတ်ပြီး ၎င်းတို့ကို ထုတ်ယူပါ။
- အခြေအနေမျိုးစုံ
- (ကွန်ပျူတာ) ပုံမှန်အသုံးအနှုန်း
စာရင်းတွင် ပါဝင်သော အမှတ်အသား
စာရင်းတစ်ခုမှ စာရင်းအသစ်တစ်ခုကို ထုတ်ပေးသောအခါ၊ စာရင်းနားလည်နိုင်မှုသည် ကွင်းပတ်အတွက်ထက် စာရေးရန် ပိုမိုလွယ်ကူပါသည်။
[expression for any variable name in iterable object if conditional expression]
အကယ်၍ ဒြပ်စင်အား အခြေအနေဆိုင်ရာ စကားရပ်တစ်ခုဖြင့်သာ ရွေးချယ်ရမည်ဆိုပါက၊ ၎င်းအား ဖော်ပြချက်တစ်ခုဖြင့် လုပ်ဆောင်မည်မဟုတ်သောကြောင့် ၎င်းသည် အောက်ပါပုံစံကို ယူသည်။
[variable name for variable name in original list if conditional expression]
အကယ်၍ conditional expression ကို အကယ်၍ conditional expression အဖြစ် ဖန်တီးထားပါက၊ ၎င်းသည် အနုတ်လက္ခဏာ ဖြစ်လာပြီး conditional expression ကို မကျေနပ်သော အရာများကို ထုတ်ယူနိုင်ပါသည်။
သီးခြားစာတန်းတစ်ခုပါရှိသည် (တစ်စိတ်တစ်ပိုင်းကိုက်ညီမှု) \ မပါဝင်ပါ။:in
“ မူရင်းစာကြောင်းရှိ သီးသန့်စာကြောင်း” တွင် မူရင်းစာကြောင်းတွင် သတ်သတ်မှတ်မှတ်စာကြောင်းပါရှိပါက True ပြန်ပေးသည်။ ဤသည်မှာ အခြေအနေဆိုင်ရာ စကားရပ်ဖြစ်သည်။
မဝင်ဘဲနဲ့ ပြီးသွားတာ။
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']
l_in = [s for s in l if 'XXX' in s]
print(l_in)
# ['oneXXXaaa', 'twoXXXbbb']
l_in_not = [s for s in l if 'XXX' not in s]
print(l_in_not)
# ['three999aaa', '000111222']
သီးခြားစာတန်းကို အစားထိုးပါ။
စာရင်းဒြပ်စင်များ၏ စာကြောင်းများကို အစားထိုးလိုပါက၊ စာရင်းနားလည်မှုမှတ်စုရှိ ဒြပ်စင်တစ်ခုစီအတွက် string method replace() ကို အသုံးပြုပါ။
အစားထိုးရန် စာကြောင်းမရှိပါက၊ replace() ကိုအသုံးပြုခြင်းဖြင့် ပြောင်းလဲမည်မဟုတ်သောကြောင့် if conditional expression အတွင်းရှိ element ကိုရွေးချယ်ရန်မလိုအပ်ပါ။
l_replace = [s.replace('XXX', 'ZZZ') for s in l]
print(l_replace)
# ['oneZZZaaa', 'twoZZZbbb', 'three999aaa', '000111222']
သီးခြားစာကြောင်းပါရှိသော ဒြပ်စင်တစ်ခုလုံးကို အစားထိုးလိုပါက ၎င်းကို ထုတ်ယူပြီး ternary operator ဖြင့် လုပ်ဆောင်ပါ။ ternary operator ကို အောက်ပါပုံစံဖြင့် ရေးသားထားသည်။True Value if Conditional Expression else False Value
list comprehension notation ၏ expression အစိတ်အပိုင်းသည် ternary operator ဖြစ်ပါက အိုကေပါ။
l_replace_all = ['ZZZ' if 'XXX' in s else s for s in l]
print(l_replace_all)
# ['ZZZ', 'ZZZ', 'three999aaa', '000111222']
အောက်ပါတို့သည် ကွင်းအတွင်းထည့်သွင်းထားသော ရလဒ်များ၏ အကျဉ်းချုပ်ဖြစ်သည်။ ကွင်းကွင်းများအသုံးပြုရာတွင် အသုံးမကျပါက၊ နားလည်ရန် ပိုမိုလွယ်ကူပြီး အမှားများကို ရှောင်ရှားနိုင်မည်ဖြစ်သည်။ သဒ္ဒါနည်းအရ၊ ကွင်းပိတ်ရေးထားရင်တောင် ပြဿနာမရှိပါဘူး။
[('ZZZ' if ('XXX' in s) else s) for s in l]
အခြေအနေတစ်ခုအနေဖြင့် in ကိုအသုံးပြုခြင်းသည် list comprehension notation တွင် ရှုပ်ထွေးနေသော်လည်း၊ list comprehension notation နှင့် ternary operators များ၏ syntactic form ၏ syntactic form ကို သတိပြုမိပါက မခက်ခဲပါ။
သတ်သတ်မှတ်မှတ် စာကြောင်းတစ်ခုနှင့် စတင်သည် \ မစတင်ပါ။:startswith()
string method သည် startswith() သည် string သည် argument တွင် သတ်မှတ်ထားသော string ဖြင့် စတင်ပါက true ပြန်ပေးသည်။
l_start = [s for s in l if s.startswith('t')]
print(l_start)
# ['twoXXXbbb', 'three999aaa']
l_start_not = [s for s in l if not s.startswith('t')]
print(l_start_not)
# ['oneXXXaaa', '000111222']
သတ်သတ်မှတ်မှတ် စာလုံး string ဖြင့် အဆုံးသတ်သည် \ မဆုံးပါ။:endswith()
string method endswith() သည် string သည် argument တွင် သတ်မှတ်ထားသော string ဖြင့် အဆုံးသတ်ပါက true ပြန်ပေးသည်။
l_end = [s for s in l if s.endswith('aaa')]
print(l_end)
# ['oneXXXaaa', 'three999aaa']
l_end_not = [s for s in l if not s.endswith('aaa')]
print(l_end_not)
# ['twoXXXbbb', '000111222']
အမှုဖြင့် စီရင်ဆုံးဖြတ်ခဲ့သည်။
string method သည် isupper(),islower() ကို အသုံးပြု၍ string တစ်ခုသည် အထက် သို့မဟုတ် စာလုံးအသေး အားလုံးကို ဆုံးဖြတ်ရန် အသုံးပြုနိုင်သည်။
l_lower = [s for s in l if s.islower()]
print(l_lower)
# ['three999aaa']
စာလုံးအကြီးနှင့် အသေးကို ပြောင်းပါ။
စာလုံးအားလုံးကို အထက် သို့မဟုတ် စာလုံးအသေးသို့ ပြောင်းလိုပါက upper() နှင့် lower() string method ကိုသုံးပါ။ အခြားနည်းလမ်းများတွင် စာလုံးအကြီးနှင့် စာလုံးငယ်များကို လဲလှယ်ပေးသည့် ပထမစာလုံးကို စာလုံးအကြီးနှင့် swapcase() တို့ကို စာလုံးအကြီးအဖြစ် စာလုံးကြီးခြင်း () ပါဝင်သည်။
အထက်ဖော်ပြပါ အစားထိုးဥပမာတွင်ကဲ့သို့ အခြေအနေအား ကျေနပ်စေသော အစိတ်အပိုင်းများကိုသာ လုပ်ဆောင်လိုပါက ternary operator ကို အသုံးပြုပါ။
l_upper_all = [s.upper() for s in l]
print(l_upper_all)
# ['ONEXXXAAA', 'TWOXXXBBB', 'THREE999AAA', '000111222']
l_lower_to_upper = [s.upper() if s.islower() else s for s in l]
print(l_lower_to_upper)
# ['oneXXXaaa', 'twoXXXbbb', 'THREE999AAA', '000111222']
အက္ခရာစဉ် သို့မဟုတ် ဂဏန်းအက္ခရာများကို အသုံးပြုခြင်းရှိမရှိ ဆုံးဖြတ်ပြီး ၎င်းတို့ကို ထုတ်ယူပါ။
string method များသည် isalpha() နှင့် isnumeric() ကို အသုံးပြု၍ string တစ်ခုသည် အက္ခရာစဉ်အားလုံး၊ ကိန်းဂဏာန်းများ စသည်တို့ကို ဆုံးဖြတ်ရန် အသုံးပြုနိုင်သည်။
l_isalpha = [s for s in l if s.isalpha()]
print(l_isalpha)
# ['oneXXXaaa', 'twoXXXbbb']
l_isnumeric = [s for s in l if s.isnumeric()]
print(l_isnumeric)
# ['000111222']
အခြေအနေမျိုးစုံ
စာရင်းနားလည်မှု၏ အခြေအနေဆိုင်ရာ ဖော်ပြချက်အပိုင်းသည် မျိုးစုံသော အခြေအနေများ ဖြစ်နိုင်သည်။ အနုတ်လက္ခဏာ “ not” အခြေအနေများကိုလည်း သုံးနိုင်သည်။
သတ်မှတ်ချက်သုံးခု သို့မဟုတ် ထို့ထက်ပိုသော အသုံးအနှုန်းများကို အသုံးပြုသောအခါ၊ ရလဒ်သည် အစဉ်လိုက်ပေါ်မူတည်၍ ကွဲပြားမည်ဖြစ်သောကြောင့် အုပ်စုတစ်ခုစီကို ကွင်းအတွင်း () တွင် ထည့်သွင်းရန် ပိုလုံခြုံပါသည်။
l_multi = [s for s in l if s.isalpha() and not s.startswith('t')]
print(l_multi)
# ['oneXXXaaa']
l_multi_or = [s for s in l if (s.isalpha() and not s.startswith('t')) or ('bbb' in s)]
print(l_multi_or)
# ['oneXXXaaa', 'twoXXXbbb']
(ကွန်ပျူတာ) ပုံမှန်အသုံးအနှုန်း
ပုံမှန်အသုံးအနှုန်းများသည် အလွန်လိုက်လျောညီထွေရှိသော စီမံဆောင်ရွက်ပေးခြင်းကို ခွင့်ပြုပါသည်။
ကိုက်ညီသည့်အရာအား re.match() ဖြင့် အကဲဖြတ်သည့်အခါ ၎င်းသည် မှန်ကန်ကြောင်း အမြဲဆုံးဖြတ်သည့်အခါတွင် ကိုက်ညီသည့်အရာအား ပြန်ပေးသည်။ မကိုက်ညီပါက၊ ၎င်းသည် None ကိုပြန်ပေးသည်၊ ၎င်းသည် အခြေအနေဆိုင်ရာဖော်ပြချက်တွင် false ဖြစ်သည်။ ထို့ကြောင့်၊ သင်သည် ပုံမှန်အသုံးအနှုန်းနှင့် ကိုက်ညီသော အစိတ်အပိုင်းများကိုသာ ထုတ်ယူလိုပါက၊ ယခင်ကဲ့သို့ စာရင်းနားလည်မှုဆိုင်ရာ ဖော်ပြမှုအပိုင်း၏ အခြေအနေအလိုက် re.match() ကို အသုံးပြုပါ။
import re
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']
l_re_match = [s for s in l if re.match('.*XXX.*', s)]
print(l_re_match)
# ['oneXXXaaa', 'twoXXXbbb']
ပုံမှန်အသုံးအနှုန်းတစ်ခု၏ လိုက်ဖက်သောအစိတ်အပိုင်းကို အစားထိုးသည့် re.sub() သည်လည်း အသုံးဝင်သည်။ ကိုက်ညီသောဒြပ်စင်များကိုသာ ထုတ်ယူပြီး အစားထိုးရန်အတွက် “ if conditional expression” ကိုထည့်ရုံပါပဲ။
l_re_sub_all = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l]
print(l_re_sub_all)
# ['aaa---one', 'bbb---two', 'three999aaa', '000111222']
l_re_sub = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l if re.match('.*XXX.*', s)]
print(l_re_sub)
# ['aaa---one', 'bbb---two']