On this page
เลือกใช้โครงสร้างไหน + Comprehension
สรุปการเลือกโครงสร้างข้อมูลให้เหมาะกับงาน และเขียน list/dict comprehension แบบกระชับ
ตอนนี้เรารู้จัก List, String, Dictionary, Set, Tuple ครบแล้ว หัวข้อปิดท้ายบทนี้จะสรุปวิธีเลือกใช้ให้เหมาะ และแนะนำ comprehension — สำนวน Python ที่ช่วยสร้างลิสต์/dict ได้สั้นและสวย
ตารางตัดสินใจ: ใช้โครงสร้างไหนดี
| ต้องการ | ใช้ | เพราะ |
|---|---|---|
| ลำดับที่เข้าถึงด้วยตำแหน่ง แก้ไขได้ | List | index ได้ เพิ่ม/ลบได้ |
| จับคู่ key → value, ค้นหาเร็ว | Dictionary | ค้นด้วย key O(1) |
| ค่าไม่ซ้ำ / เช็คสมาชิกบ่อย | Set | ตัดซ้ำอัตโนมัติ, in เร็ว O(1) |
| ข้อมูลคงที่ ไม่ควรเปลี่ยน | Tuple | กันแก้พลาด, เป็น key ได้ |
| ข้อความ | String | มีเมธอดจัดการตัวอักษรครบ |
ถามตัวเองว่า: (1) ข้อมูลต้องเรียงลำดับไหม → ใช้ list/tuple (2) ต้องจับคู่ชื่อกับค่าไหม → dict (3) สนแค่ว่ามีหรือไม่มี และไม่ซ้ำ → set (4) ต้องกันการแก้ไขไหม → tuple การเลือกถูกตั้งแต่ต้นทำให้โค้ดเร็วและอ่านง่ายขึ้นมาก
List Comprehension — สร้างลิสต์แบบสั้น
comprehension คือวิธีสร้างลิสต์จากลิสต์อื่นในบรรทัดเดียว แทนการเขียน for loop หลายบรรทัด เป็นสำนวนที่ Python นิยมมากและเจอบ่อยในโค้ดจริง
# วิธีปกติ
squares = []
for i in range(1, 6):
squares.append(i ** 2)
print(squares) # [1, 4, 9, 16, 25]
# เขียนด้วย comprehension — บรรทัดเดียว
squares = [i ** 2 for i in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
# มีเงื่อนไขกรองได้
evens = [i for i in range(10) if i % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]# ใช้กับข้อมูลจริง
names = ["aphisit", "mali", "mochi"]
upper = [n.upper() for n in names]
print(upper) # ['APHISIT', 'MALI', 'MOCHI']
lengths = [len(n) for n in names]
print(lengths) # [7, 4, 5]comprehension เหมาะกับตรรกะสั้น ๆ ถ้าซ้อนเงื่อนไขหลายชั้นหรือยาวมากจนอ่านยาก ให้กลับไปเขียน for loop ปกติ ความอ่านง่ายสำคัญกว่าความสั้น
Dict & Set Comprehension
# dict comprehension
squares = {i: i ** 2 for i in range(1, 5)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16}
# set comprehension
words = ["apple", "banana", "apple", "cherry"]
first_letters = {w[0] for w in words}
print(first_letters) # {'a', 'b', 'c'}สรุปบทที่ 3
- เลือกโครงสร้างจากสิ่งที่ต้องทำ: list (ลำดับ), dict (จับคู่+ค้นเร็ว), set (ไม่ซ้ำ), tuple (คงที่)
- list comprehension สร้างลิสต์ในบรรทัดเดียว: [นิพจน์ for x in ที่มา if เงื่อนไข]
- มี dict และ set comprehension ด้วย
- comprehension ดีเมื่อสั้นและอ่านง่าย — ยาวเกินไปให้ใช้ for loop ปกติ
1) ใช้ comprehension สร้างลิสต์กำลังสองของ 1-10 2) กรองเฉพาะเลขคู่จากลิสต์ด้วย comprehension 3) สร้าง dict ที่ map คำ -> ความยาวของคำ 4) จากลิสต์อุณหภูมิเซลเซียส แปลงเป็นฟาเรนไฮต์ทั้งหมดด้วย comprehension 5) เลือกโครงสร้างที่เหมาะกับ: เก็บรายชื่อนักเรียนเรียงตามลำดับ / เก็บคะแนนตามชื่อ / เก็บ tag ที่ไม่ซ้ำ