บทความนี้จะอธิบายเรื่อง List Slicing (การตัดรายการ) และ List Comprehension (การสร้างลิสต์ใหม่จากลิสต์เดิม) ซึ่งเป็นเทคนิคพื้นฐานแต่ทรงพลังใน Python
List Slicing คืออะไร?
Slicing หมายถึงการ "หั่น" ลิสต์เพื่อดึงเฉพาะส่วนที่ต้องการ โดยระบุ เริ่มต้น (start), สิ้นสุด (stop) และ ขั้นตอน (step)
List Comprehension คืออะไร?
List Comprehension เป็นไวยากรณ์ที่กระชับสำหรับสร้างลิสต์ใหม่จากลิสต์เดิม (หรือ iterator อื่นๆ) พร้อมกรองหรือแปลงค่าได้ในบรรทัดเดียว
ตัวอย่าง List Slicing
>> mylist = ["Which ", "Language ", "To ", "Choose ", "Difficult, ", "Python ", " ", "Java ", "Kotlin ", "Many more"]
# สไลซ์ทุก 2 ตัว ตั้งแต่ต้นจนก่อนตัวสุดท้าย
>>> mylist_slice1 = mylist[0:-1:2]
>>> mylist_slice1
['Which ', 'To ', 'Difficult, ', 'Java ']
# เริ่มจาก index 1 ทุก 2 ตัว
>>> mylist_slice2 = mylist[1:-1:2]
>>> mylist_slice2
['Language ', 'Choose ', 'Python ', 'Kotlin ']
รูปแบบทั่วไป: mylist[START:STOP:STEP]
START: เริ่มที่ index นี้ (default = 0)STOP: หยุดก่อน index นี้ (default = ความยาวลิสต์)STEP: ขั้นตอนการกระโดด (default = 1)
Index ลบนับจากท้าย: -1 = ตัวสุดท้าย, -2 = ตัวก่อนสุดท้าย
ตัวอย่าง List Comprehension
สร้างลิสต์ตัวเลข
>> mylist1 = [x for x in range(0, 40)]
>>> mylist1
[0, 1, 2, 3, ..., 39]
# เฉพาะเลขคู่
>>> mylist2 = [x for x in range(0, 41) if x % 2 == 0]
>>> mylist2
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40]
แปลงสตริงในลิสต์
>> strlist = ["This", "Is", "A", "List", "Of", "Strings", "For", "List", "Comprehension"]
>>> [x.lower() for x in strlist]
['this', 'is', 'a', 'list', 'of', 'strings', 'for', 'list', 'comprehension']
รูปแบบทั่วไป
[expression for item in iterable if condition]
expression: นิพจน์สำหรับคำนวณค่าแต่ละตัวfor item in iterable: วนลูปผ่านแต่ละสมาชิกif condition: เงื่อนไขกรอง (optional)
List Comprehension ทำให้โค้ดสั้น กระชับ และอ่านง่ายกว่า loop แบบเดิมมาก