
เขียนโปรแกรมภาษา Python ตอนที่ 72 List Comprehension
List comprehension คือวิธีการเขียน Syntax ให้สั้นลงเมื่อต้องการสร้าง List ใหม่ขึ้นมาและเก็บข้อมูลเฉพาะรายการที่มีข้อมูลที่เราต้องการจากลิสต์ที่มีอยู่เดิม
โดยปกติถ้าเราต้องการดึงข้อมูลจากลิสต์ใด ๆ ก็ตามโดยให้คัดเอาเฉพาะรายการที่มีข้อมูลที่เราต้องการ แล้วเอารายการเหล่านั้นมาสร้างเป็นลิสต์ใหม่ เราจะใช้ลูป for
ในการวนเข้าไปในรายการของลิสต์นั้นทีละตัวและตรวจสอบว่าแต่ละรายการมีข้อมูลที่เราต้องการหรือไม่ วนเข้าไปจนครบทุกรายการ ดังตัวอย่าง
phone = ["iPhone", "Vivo", "Asus", "Wiko", "Nokia", "Samsung", "Oppo"] newlist = [] for x in phone: if "i" in x: newlist.append(x) print(newlist)
จากโค้ดตัวอย่าง เราต้องการค้นหารายการจากลิสต์ที่มีตัวอักษร “i” แล้วนำมาสร้างเป็นลิสต์ใหม่ จึงเขียนโค้ดได้ดังตัวอย่าง
- บรรทัดที่ 1 สร้างลิสต์ที่เก็บรายการสมาร์ทโฟนไว้
- บรรทัดที่ 2 สร้างลิสต์ใหม่ว่าง ๆ ไว้รอ
- บรรทัดที่ 4-6 ใช้ลูป
for
วนเข้าไปตรวจสอบรายการในลิสต์จนครบทุกรายการ โดย - บรรทัดที่ 5 ตรวจสอบว่าแต่ละรายการในลิสต์มีตัวอักษร “i” อยู่หรือไม่
- บรรทัดที่ 6 ถ้าตรงเงื่อนไขตามบรรทัดที่ 5 ให้นำรายการนั้นมาเก็บไว้ในลิสต์ใหม่ที่สร้างขึ้น
ผลลัพธ์
[‘iPhone’, ‘Vivo’, ‘Wiko’, ‘Nokia’]
จากตัวอย่างด้านบนนั้น ถ้าใช้วิธีแบบ list comprehension เราจะสามารถเขียนโค้ดให้สั้นลงได้ดังนี้
phone = ["iPhone", "Vivo", "Asus", "Wiko", "Nokia", "Samsung", "Oppo"] newlist = [x for x in phone if "i" in x] print(newlist)
- บรรทัดที่ 1 สร้างลิสต์เก็บรายการสมาร์ทโฟน
- บรรทัดที่ 2 วนลูปเข้าไปตรวจสอบทุกรายการในลิสต์แล้วนำรายการที่ตรงเงื่อนไขคือมีตัวอักษร “i” มาเก็บไว้ในลิสต์ใหม่ด้วยวิธี list comprehension
ผลลัพธ์ก็จะได้เหมือนกันกับโค้ดก่อนหน้านี้ที่เขียนด้วยวิธีปกติ
[‘iPhone’, ‘Vivo’, ‘Wiko’, ‘Nokia’]
จะเห็นได้ว่า การใช้ list comprehension ช่วยให้เราเขียนโค้ดได้สั้นลง
Syntax
รูปแบบ Syntax ของ list comprehension จะเป็นดังนี้
newlist = [expression for
item in
iterable if
condition == True
]
โดย list comprehension จะคืนค่ากลับมาเป็นลิสต์ใหม่ และไม่มีการเปลี่ยนแปลงค่าในลิสต์ต้นทาง
Expression
expression ใช้อ้างถึงรายการปัจจุบันใน iterable เป้าหมาย ซึ่งเราสามารถจัดการกับรายการนั้น ๆ ก่อนที่จะเก็บลงในลิสต์ใหม่ได้ เช่น
phone = ["iPhone", "Vivo", "Asus", "Wiko", "Nokia", "Samsung", "Oppo"] newlist = [x.upper() for x in phone if 'i' in x] print(newlist)
- บรรทัดที่ 2 แปลงข้อมูลปัจจุบันให้เป็นตัวอักษรพิมพ์ใหญ่ก่อนที่จะเก็บลงในลิสต์ใหม่
ผลลัพธ์
[‘IPHONE’, ‘VIVO’, ‘WIKO’, ‘NOKIA’]
ใน expression เราอาจจะเพิ่ม condition เข้าไปด้วยก็ได้ เพื่อเป็นเงื่อนไขในการจัดการกับข้อมูลเป้าหมายก่อนที่จะเก็บลงในลิสต์ใหม่ เช่น
phone = ["iPhone", "Vivo", "Asus", "Wiko", "Nokia", "Samsung", "Oppo"] newlist = [x if x != "Vivo" else "Lenovo" for x in phone if 'i' in x] print(newlist)
- บรรทัดที่ 2 กำหนดเงื่อนไขใน expression ว่าถ้ารายการเป้าหมายเป็นคำว่า “Vivo” ให้เปลี่ยนเป็นคำว่า “Lenovo” แทน
ผลลัพธ์
[‘iPhone’, ‘Lenovo’, ‘Wiko’, ‘Nokia’]
Iterable
iterable ในตัวอย่าง เป็นข้อมูลประเภท List แต่ความจริงแล้ว สามารถใช้เป็นข้อมูลประเภท iterable ประเภทอื่น ๆ ก็ได้เช่นกัน เช่น Tuple, Set เป็นต้น
เราสามารถใช้ฟังก์ชัน range()
มาสร้าง iterable ก็ได้ เช่น
newlist = [x for x in range(10)] print(newlist)
ผลลัพธ์
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
หรือ
newlist = [x for x in range(20) if x > 9] print(newlist)
ผลลัพธ์
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Condition
condition ทำหน้าที่เป็นตัวคัดกรองข้อมูลให้รับมาเฉพาะรายการที่มีค่าเป็น True เท่านั้น ตัวอย่างเช่น
phone = ["iPhone", "Vivo", "Asus", "Wiko", "Nokia", "Samsung", "Oppo"] newlist = [x for x in phone if x != "Wiko"]
condition if x != "Wiko"
จะคืนค่ากลับมาเป็น True ก็ต่อเมื่อค่าของรายการนั้น ๆ ไม่เท่ากับ “Wiko”
ผลลัพธ์
[‘iPhone’, ‘Vivo’, ‘Asus’, ‘Nokia’, ‘Samsung’, ‘Oppo’]
เราอาจจะใช้งาน list comprehension โดยไม่ต้องกำหนด condition ก็ได้เช่นกัน เช่น
phone = ["iPhone", "Vivo", "Asus", "Wiko", "Nokia", "Samsung", "Oppo"] newlist = [x for x in phone] print(newlist)
ผลลัพธ์ก็จะเหมือนการคัดลอกลิสต์ เพราะจะเป็นการนำเอาข้อมูลในลิสต์ทั้งหมดมาเก็บในลิสต์ใหม่ เนื่องจากไม่มีการกำหนดเงื่อนไข จึงไม่มีการกรองข้อมูล
[‘iPhone’, ‘Vivo’, ‘Asus’, ‘Wiko’, ‘Nokia’, ‘Samsung’, ‘Oppo’]
เขียนโปรแกรมภาษา Python
- ตอนที่ 1 ทำความรู้จักกับภาษาไพธอน Python
- ตอนที่ 2 เตรียมเครื่องมือ
- ตอนที่ 3 Python Syntax
- ตอนที่ 4 การเขียนคอมเม้นต์
- ตอนที่ 5 การใช้ฟังก์ชัน print
- ตอนที่ 6 ตัวแปร
- ตอนที่ 7 การตั้งชื่อตัวแปร
- ตอนที่ 8 การกำหนดค่าให้ตัวแปรทีละหลายตัว
- ตอนที่ 9การแสดงค่าจากตัวแปร
- ตอนที่ 10 ตัวแปรประเภท Global
- ตอนที่ 11 ชนิดข้อมูล
- ตอนที่ 12 ข้อมูลชนิดตัวเลข
- ตอนที่ 13 การแปลงชนิดข้อมูล
- ตอนที่ 14 ข้อมูลชนิด String
- ตอนที่ 15 slice syntax
- ตอนที่ 16 การเปลี่ยนแปลงข้อมูล String
- ตอนที่ 17 การต่อข้อมูลชนิด String
- ตอนที่ 18 การจัดรูปแบบ String
- ตอนที่ 19 Escape Character
- เตอนที่ 20 เมธอด zfill()
- ตอนที่ 21 เมธอด upper()
- ตอนที่ 22 เมธอด title()
- ตอนที่ 23 เมธอด swapcase()
- ตอนที่ 24 เมธอด strip()
- ตอนที่ 25 เมธอด startswith()
- ตอนที่ 26 เมธอด splitlines()
- ตอนที่ 27 เมธอด split()
- ตอนที่ 28 เมธอด rstrip()
- ตอนที่ 29 เมธอด rsplit()
- ตอนที่ 30 เมธอด rpartition()
- ตอนที่ 31 เมธอด rjust()
- ตอนที่ 32 เมธอด rindex()
- ตอนที่ 33 เมธอด rfind()
- ตอนที่ 34 เมธอด replace()
- ตอนที่ 35 เมธอด partition()
- ตอนที่ 36 เมธอด lstrip()
- ตอนที่ 37 เมธอด lower()
- ตอนที่ 38 เมธอด ljust()
- ตอนที่ 39 เมธอด join()
- ตอนที่ 40 เมธอด isupper()
- ตอนที่ 41 เมธอด istitle()
- ตอนที่ 42 เมธอด isspace()
- ตอนที่ 43 เมธอด isprintable()
- ตอนที่ 44 เมธอด isnumeric()
- ตอนที่ 45 เมธอด islower()
- ตอนที่ 46 เมธอด isidentifier()
- ตอนที่ 47 เมธอด isdigit()
- ตอนที่ 48 เมธอด isdecimal()
- ตอนที่ 49 เมธอด isalpha()
- ตอนที่ 50 เมธอด isalnum()
- ตอนที่ 51 เมธอด index()
- ตอนที่ 52 เมธอด format()
- ตอนที่ 53 เมธอด find()
- ตอนที่ 54 เมธอด expandtabs()
- ตอนที่ 55 เมธอด endswith()
- ตอนที่ 56 เมธอด encode()
- ตอนที่ 57 เมธอด count()
- ตอนที่ 58 เมธอด center()
- ตอนที่ 59 เมธอด casefold()
- ตอนที่ 60 เมธอด capitalize()
- ตอนที่ 61 เมธอด format_map()
- ตอนที่ 62 เมธอด maketrans()
- ตอนที่ 63 เมธอด translate()
- ตอนที่ 64 ข้อมูลชนิด Boolean
- ตอนที่ 65 ตัวดำเนินการ
- ตอนที่ 66 ข้อมูลประเภท List
- ตอนที่ 67 การเข้าถึงสมาชิกใน List
- ตอนที่ 68 การเปลี่ยนแปลงข้อมูลใน List
- ตอนที่ 69 การเพิ่มข้อมูลใน List
- ตอนที่ 70 การลบข้อมูลใน List
- ตอนที่ 71 การเข้าถึงข้อมูลใน List ด้วย loop
- ตอนที่ 72 List Comprehension
- ตอนที่ 73 การเรียงข้อมูลใน List
- ตอนที่ 74 การคัดลอก List
- ตอนที่ 75 การรวม List เข้าด้วยกัน
- ตอนที่ 76 เมธอด append()
- ตอนที่ 77 เมธอด clear()
- ตอนที่ 78 เมธอด copy()
- ตอนที่ 79 เมธอด count()
- ตอนที่ 80 เมธอด extend()
- ตอนที่ 81 เมธอด index()
- ตอนที่ 82 เมธอด insert()
- ตอนที่ 83 เมธอด pop()
- ตอนที่ 84 เมธอด remove()
- ตอนที่ 85 เมธอด reverse()
- ตอนที่ 86 เมธอด sort()
- ตอนที่ 87 ข้อมูลชนิด Tuple
- ตอนที่ 88 การเข้าถึงข้อมูลใน Tuple
- ตอนที่ 89 การแก้ไขข้อมูลใน Tuple
- ตอนที่ 90 การแยกข้อมูลใน Tuple
- ตอนที่ 91 เข้าถึงข้อมูลใน Tuple ด้วยลูป
- ตอนที่ 92 การรวม Tuple เข้าด้วยกัน
- ตอนที่ 93 เมธอด count()
- ตอนที่ 94 เมธอด index()
- ตอนที่ 95 ข้อมูลประเภท Set
- ตอนที่ 96 การเข้าถึงข้อมูลใน Set
- ตอนที่ 97 การเพิ่มข้อมูลใน Set
- ตอนที่ 98 การลบข้อมูลใน Set
- ตอนที่ 99 การเข้าถึงข้อมูลใน Set ด้วยลูป for
- ตอนที่ 100 การจอย Join ข้อมูลใน Set
- ตอนที่ 101 เมธอด add()
- ตอนที่ 102 เมธอด clear()
- ตอนที่ 103 เมธอด copy()
- ตอนที่ 104 เมธอด difference()
- ตอนที่ 105 เมธอด difference_update()
- ตอนที่ 106 เมธอด discard()
- ตอนที่ 107 เมธอด intersection()
- ตอนที่ 108 เมธอด intersection_update()
- ตอนที่ 109 เมธอด isdisjoint()
- ตอนที่ 110 เมธอด issubset()
- ตอนที่ 111 เมธอด issuperset()
- ตอนที่ 112 เมธอด pop()
- ตอนที่ 113 เมธอด remove()
- ตอนที่ 114 เมธอด symmetric_difference()
- ตอนที่ 115 เมธอด symmetric_difference_update()
- ตอนที่ 116 เมธอด union()
- ตอนที่ 117 เมธอด update()
- ตอนที่ 118 ข้อมูลประเภท Dictionary
- ตอนที่ 119 การเข้าถึงข้อมูลใน Dictionary
- ตอนที่ 120 การเปลี่ยนแปลงข้อมูลใน Dictionary
- ตอนที่ 121 การเพิ่มข้อมูลใน Dictionary
- ตอนที่ 122 การลบข้อมูลใน Dictionary
- ตอนที่ 123 การวนลูปเข้าถึงสมาชิกใน Dictionary
- ตอนที่ 124 การคัดลอก Dictionary
- ตอนที่ 125 Dictionary ซ้อนกัน
- ตอนที่ 126 เมธอด clear()
- ตอนที่ 127 เมธอด copy()
- ตอนที่ 128 เมธอด fromkeys()
- ตอนที่ 129 เมธอด get()
- ตอนที่ 130 เมธอด items()
- ตอนที่ 131 เมธอด keys()
- ตอนที่ 132 เมธอด pop()
- ตอนที่ 133 เมธอด popitem()
- ตอนที่ 134 เมธอด setdefault()
- ตอนที่ 135 เมธอด update()
- ตอนที่ 136 เมธอด values()
- ตอนที่ 137 การตรวจสอบเงื่อนไขด้วย If statement
- ตอนที่ 138 การใช้ while loop