လွယ်လွယ်ပြောရရင် List Comprehension ဆိုတာ Loop သုံးပြီး List တစ်ခု တည်ဆောက်တာကို တစ်ကြောင်းထဲ ရေးလိုက်တဲ့ Python နည်းလမ်းပါ။ သာမန် Loop နဲ့ ၄ ကြောင်းလောက် ရေးရမယ့် အလုပ်ကို List Comprehension နဲ့ဆို တစ်ကြောင်းတည်းနဲ့ ပြီးသွားတယ်။ Python ရေးတဲ့သူတိုင်း သိထားသင့်တဲ့ လက်နက်ကောင်းတစ်လက်လို့ ကျွန်တော် ထင်ပါတယ်။
ကျွန်တော် ဒါကို ဈေးဝယ်စာရင်းနဲ့ ဥပမာပေးချင်တယ်။ Loop သုံးတာက ဈေးသည်ဆီက ပစ္စည်းတစ်မျိုးချင်းစီကို ဝယ်ပြီး အိတ်ထဲ တစ်ခု ချင်း ထည့်သွားသလိုပါ — ယူလိုက်၊ ထည့်လိုက်၊ ယူလိုက်၊ ထည့်လိုက်။ List Comprehension ကတော့ ဈေးသည်ကို “ဒီအမျိုးအစားထဲက ပစ္စည်းတိုင်းကို အိတ်ထဲ ထည့်ပေးပါ” လို့ တစ်ခါတည်း မှာလိုက်သလိုပါ။ ရလဒ်က အတူတူပဲ — အိတ်ထဲမှာ ပစ္စည်းတွေ ပြည့်သွားတယ်။ ဒါပေမယ့် ဒုတိယနည်းက ပိုမြန်၊ ပိုရှင်းပါတယ်။
သာမန် Loop နဲ့ နှိုင်းယှဉ်ကြည့်မယ်
၁ ကနေ ၅ အထိ ဂဏန်းတွေရဲ့ နှစ်ဆဖြစ်တဲ့ List တစ်ခု လိုချင်တယ်ဆိုပါစို့။ Loop နဲ့ရေးရင် ဒီလိုပါ။
doubled = []
for x in range(1, 6):
doubled.append(x * 2)
print(doubled) # [2, 4, 6, 8, 10]
List Comprehension နဲ့ရေးရင် ဒီလိုပါ။
doubled = [x * 2 for x in range(1, 6)]
print(doubled) # [2, 4, 6, 8, 10]
တစ်ကြောင်းတည်း။ ဖတ်ကြည့်ပါ — “x * 2 ကို range(1, 6) ထဲက x တိုင်းအတွက် ယူ” လို့ ဖတ်လို့ရတယ်။ အဲဒီအတိုင်းပဲ အလုပ်လုပ်ပါတယ်။ ဘယ်ဘက်က ရချင်တဲ့ ပုံစံ၊ အလယ်က Loop၊ ဒါပဲ။
အခြေအနေပါ ထည့်လို့ရတယ်
ဂဏန်းစုံတွေပဲ လိုချင်တယ်ဆိုရင် if ကို နောက်မှာ ကပ်ထည့်လို့ရတယ်။
evens = [x for x in range(1, 11) if x % 2 == 0]
print(evens) # [2, 4, 6, 8, 10]
စာသားတွေနဲ့လည်း သုံးလို့ရတယ်။ ဥပမာ နာမည်စာရင်းထဲက အက္ခရာ ၃ လုံးထက် ရှည်တဲ့ နာမည်တွေပဲ ရွေးချင်တယ်ဆိုရင်။
names = ["Aung", "Su", "May", "Htet", "Ko"]
long_names = [n for n in names if len(n) > 3]
print(long_names) # ['Aung', 'Htet']
ဒီမှာ သတိထားရမှာက if က ညာဘက်မှာ ရှိတယ်၊ ရွေးချယ်တဲ့ စည်းကမ်းကို ပြောတာပါ။
if-else လည်း ထည့်လို့ရတယ်
တခါတလေ အခြေအနေပေါ် မူတည်ပြီး တန်ဖိုးနှစ်မျိုး ထည့်ချင်တာမျိုး ရှိတယ်။ ဥပမာ စုံဂဏန်းဆို “even”၊ မဂဏန်းဆို “odd” လို့ တံဆိပ်ကပ်ချင်တယ်ဆိုရင်။
labels = ["even" if x % 2 == 0 else "odd" for x in range(1, 6)]
print(labels) # ['odd', 'even', 'odd', 'even', 'odd']
ဒီနေရာမှာ if-else က ဘယ်ဘက်မှာ ရောက်သွားတာကို သတိထားပါ။ ရွေးချယ်တဲ့ စည်းကမ်းက ညာဘက်၊ တန်ဖိုးရွေးတာက ဘယ်ဘက်ပါ။ အစပိုင်းမှာ ရောတတ်တယ် — ကျွန်တော်ကိုယ်တိုင်လည်း အစက ဒါကို ရောဖူးပါတယ်။
လက်တွေ့မှာ ဘယ်မှာ သုံးလဲ?
ကျွန်တော် ကိုယ်တိုင် အသုံးအများဆုံး နေရာတွေကို ပြောပြမယ်။
ဖိုင်နာမည်တွေထဲက .txt နဲ့ ဆုံးတဲ့ ဖိုင်တွေပဲ ရွေးတာ — [f for f in files if f.endswith(".txt")]
API က ပြန်လာတဲ့ Data ထဲက လိုချင်တဲ့ Field တစ်ခုတည်း ထုတ်ယူတာ — [user["name"] for user in users]
စာသားတွေကို အကြီးစာလုံး ပြောင်းတာ — [word.upper() for word in words]
ဂဏန်းစာရင်းထဲက အနှုတ်တွေကို ဖယ်တာ — [n for n in numbers if n > 0]
ဒါတွေက Loop နဲ့ရေးလည်း ရပါတယ်။ ဒါပေမယ့် List Comprehension နဲ့ရေးရင် Code က တိုတယ်၊ ဖတ်ရတာ ရှင်းတယ်၊ Python ရေးတဲ့သူတွေကြားမှာ ဒီပုံစံက စံဖြစ်နေပြီ။
သတိထားရမယ့် အချက်
List Comprehension က ကောင်းပေမယ့် အရာတိုင်းကို ဒါနဲ့ ရေးရမယ်လို့ မဆိုလိုပါဘူး။ Nested Comprehension — Comprehension ထဲမှာ Comprehension ထပ်ထည့်တာမျိုး — ရေးရင် ဖတ်ရတာ အရမ်းခက်သွားတတ်တယ်။
# ဒါက ဖတ်ရခက်တယ် — မရေးတာကောင်းတယ်
matrix = [[i * j for j in range(3)] for i in range(3)]
၂ ထပ်အထိတော့ ရသေးတယ်။ ဒါပေမယ့် ၃ ထပ်ဖြစ်သွားရင် သာမန် Loop နဲ့ ရေးတာက ပိုရှင်းပါလိမ့်မယ်။ နောက်တစ်ချက်က List Comprehension က List တစ်ခုလုံးကို Memory ထဲမှာ တစ်ခါတည်း တည်ဆောက်တာပါ။ Data အရမ်းများရင် Memory ပြည့်သွားနိုင်တယ်။ အဲဒီအခါမျိုးမှာ Generator Expression — ကွင်းစကွင်းပိတ်အစား ကွင်းဝိုင်းနဲ့ ရေးတဲ့ (x * 2 for x in range(1000000)) — ကို သုံးတာ ပိုသင့်တော်ပါတယ်။
နောက်ဆုံးတစ်ခုက — Side Effect ရှိတဲ့ အလုပ်တွေကို List Comprehension ထဲ မထည့်ပါနဲ့။ ဥပမာ [print(x) for x in range(5)] လို့ ရေးလို့ရပေမယ့် ဒါက List Comprehension ရဲ့ ရည်ရွယ်ချက် မဟုတ်ပါဘူး။ List တည်ဆောက်ဖို့ပဲ သုံးပါ။ Print လုပ်ချင်ရင် သာမန် Loop နဲ့ပဲ ရေးပါ။
ဒီနေ့ကစပြီး စမ်းကြည့်ပါ
သင် Python သင်နေတယ်ဆိုရင် ဒီနေ့ကစပြီး Loop နဲ့ List တည်ဆောက်တဲ့ နေရာတိုင်းမှာ List Comprehension နဲ့ ပြန်ရေးကြည့်ပါ။ အစမှာ နည်းနည်း ထူးဆန်းနေလိမ့်မယ်။ ဒါပေမယ့် တစ်ပတ်လောက်ကြာရင် လက်ထဲ စွဲသွားပါလိမ့်မယ်။ Python က တစ်ခြား Language တွေထက် Code တိုအောင် ရေးလို့ရတယ်ဆိုတာ ဒီလို အသေးအမွှား လက်နက်လေးတွေကြောင့်ပါ။
Loop တစ်ခု ရေးတိုင်း ကိုယ့်ကိုယ်ကို မေးကြည့်ပါ — “ဒါကို တစ်ကြောင်းထဲ ရေးလို့ရမလား?” လို့။ ရတယ်ဆိုရင် List Comprehension က သင့်အဖြေပါ။ 🙂
—