Notes & software courses · Free to learn
Aph's Blog
On this page

เลือกใช้โครงสร้างไหน + Comprehension

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

สรุปการเลือกโครงสร้างข้อมูลให้เหมาะกับงาน และเขียน list/dict comprehension แบบกระชับ

ตอนนี้เรารู้จัก List, String, Dictionary, Set, Tuple ครบแล้ว หัวข้อปิดท้ายบทนี้จะสรุปวิธีเลือกใช้ให้เหมาะ และแนะนำ comprehension — สำนวน Python ที่ช่วยสร้างลิสต์/dict ได้สั้นและสวย

ตารางตัดสินใจ: ใช้โครงสร้างไหนดี

ต้องการใช้เพราะ
ลำดับที่เข้าถึงด้วยตำแหน่ง แก้ไขได้Listindex ได้ เพิ่ม/ลบได้
จับคู่ 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 นิยมมากและเจอบ่อยในโค้ดจริง

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]
python
# ใช้กับข้อมูลจริง
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 จนยาวเกินไป

comprehension เหมาะกับตรรกะสั้น ๆ ถ้าซ้อนเงื่อนไขหลายชั้นหรือยาวมากจนอ่านยาก ให้กลับไปเขียน for loop ปกติ ความอ่านง่ายสำคัญกว่าความสั้น

Dict & Set Comprehension

python
# 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 ที่ไม่ซ้ำ