List Comprehension — แบบฝึกทบทวน
. . .
Note
ครอบคลุม: สร้าง list ด้วย loop · list comprehension · เงื่อนไข if · ร่วมกับฟังก์ชัน · 2D list ทบทวนเนื้อหาเต็มได้ที่ Module 10 👈
เลือกคำตอบที่ถูกต้อง — เฉลยจะปรากฏเมื่อกดถัดไป
List comprehension ประกอบด้วยส่วนใดบ้าง?
A. ทำซ้ำ + ประมวลผล + เงื่อนไข(optional)
B. import + run + print
C. def + return
Tip
ตอบ: A — [exprfor x in dataif cond] = ประมวลผล + ทำซ้ำ + เงื่อนไข
[2*i for i in range(5)] ให้ผลลัพธ์ใด?
A. [0, 2, 4, 6, 8]
B. [2, 4, 6, 8, 10]
C. [0, 1, 2, 3, 4]
Tip
ตอบ: A — i = 0,1,2,3,4 → 2*i = [0, 2, 4, 6, 8]
ต้องการเก็บเฉพาะค่าที่ตรงเงื่อนไข — ต้องวาง if ไว้ตรงไหน?
A. ก่อน for
B. ท้าย for-loop เช่น [x for x in data if x>5]
C. ไว้นอกวงเล็บ
Tip
ตอบ: B — เพิ่ม if condition ไว้ด้านท้าย → เก็บผลลัพธ์เฉพาะรอบที่เงื่อนไขเป็นจริง
การสร้าง list ด้วย loop เริ่มจากอะไร?
A. list ที่มีข้อมูลครบ
B. empty list [] แล้ว .append() ในลูป
C. ตัวแปรตัวเลข
Tip
ตอบ: B — a = [] แล้ววน a.append(...) เพิ่ม item ทีละตัว
2D list คืออะไร?
A. list ที่มีตัวเลข 2 ตัว
B. list ที่มี item เป็น list อีกชั้น (list of lists)
C. list 2 ตัวแปร
Tip
ตอบ: B — เช่น [[0,1,2],[3,4,5]] · อ้างอิงด้วย a[row][col]
a = [[0,1,2],[3,4,5],[6,7,8]] — a[1][2] มีค่าเท่าใด?
A. 2
B. 5
C. 7
Important
ตอบ: B — a[1] = [3,4,5] (row 1) แล้ว [2] = 5 (column 2)
โค้ดจะพิมพ์อะไร? — ทายก่อน แล้วกดถัดไปดูเฉลย
Tip
ผลลัพธ์: [0, 1, 4, 9, 16] — i = 0..4 → กำลังสองของแต่ละตัว
Important
ผลลัพธ์: [8, 10] — เก็บเฉพาะค่าที่ > 5 (3, 1, 5 ถูกกรองทิ้ง)
Tip
ผลลัพธ์: [[0, 0, 0], [0, 0, 0]] — 2 row (range(2)) แต่ละ row คือ [0]*3 = 3 ช่อง
ไล่ค่า list ทีละรอบของลูป
ค่าของ a หลังแต่ละรอบเป็นอย่างไร?
รอบ (i) |
a.append(?) |
a |
|---|---|---|
| 0 | 0 | ? |
| 1 | 2 | ? |
| 2 | 4 | ? |
| 3 | 6 | ? |
Tip
รอบ (i) |
a |
|---|---|
| 0 | [0] |
| 1 | [0, 2] |
| 2 | [0, 2, 4] |
| 3 | [0, 2, 4, 6] |
เทียบเท่ากับ [2*i for i in range(4)]
โค้ดผิดตรงไหน — ทำไม
ผิดตรงไหน?
Important
ผิด: ลืมปิด ] ของ list comprehension → SyntaxError แก้: a = [2*i for i in range(5)]
ผิดตรงไหน?
Important
ผิด: วาง if ผิดที่ — เมื่อใช้กรอง ต้องไว้ท้าย for แก้: r = [x for x in range(10) if x % 2 == 0] → [0, 2, 4, 6, 8]
เติมโค้ดในช่อง ____ แล้วกด Run
เติมโค้ดสร้าง [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] ด้วย list comprehension
จาก xs เก็บ \(x^2\) เฉพาะเมื่อ x > 5 (list comprehension)
เติมโค้ดสร้าง 2D-list ขนาด 3 row × 4 column สมาชิกเป็น 0 ทั้งหมด
ฝึกเพิ่ม — อ่านและเขียน comprehension ให้คล่อง
Tip
ผลลัพธ์:
[1, 4, 9]
[1, 3, 5]
a = กำลังสองของ 1,2,3 · b = เก็บเฉพาะเลขคี่ใน 0–5
แปลง for-loop ให้เป็น list comprehension
Important
ผลลัพธ์: [[0, 1, 2], [0, 1, 2]] — comp ซ้อน 2 ชั้น: ชั้นนอกสร้าง 2 row (i) · ชั้นในสร้าง [0,1,2] (j)
แปลง/ประมวลผลข้อมูลการวัดด้วย list comprehension
Tip
ผลลัพธ์: [32.0, 77.0, 212.0] — แปลง °C → °F ทุก item ด้วยสูตร \(F = \tfrac95 C + 32\)
เติมโค้ดขยายสัญญาณ ทุกค่าเป็น 2 เท่า (list comprehension)
Tip
ผลลัพธ์: [55, 70] — list comprehension + เงื่อนไข เก็บเฉพาะค่าที่เกินเกณฑ์ 50
trap ของ 2D list + numerical method
[[0]*3]*2 ทำไมพังgrid เป็นอะไร? (ระวัง!)
Important
ผลลัพธ์: [[5, 0, 0], [5, 0, 0]] — *2 คัดลอก reference เดียวกัน ทั้ง 2 แถวชี้ list เดียว → แก้แถวเดียวเปลี่ยนทั้งคู่ แก้: ใช้ comprehension [[0]*3 for i in range(2)] (สร้าง list ใหม่ทุกแถว)
หาพื้นที่ใต้กราฟ \(y=x^2\) ช่วง [0, 2] — เติมสูตรพื้นที่คางหมู \(\tfrac{y_i + y_{i+1}}{2} \times \Delta x\)
Note
ค่าจริง \(\int_0^2 x^2\,dx = 2.667\) — คางหมูให้ค่าประมาณ 2.75 (ยิ่งแบ่งถี่ยิ่งแม่น)
ทบทวนเนื้อหาเต็มได้ที่ Module 10 · ไปต่อ Module 11
🏠 259201 — Module 10 ทบทวน | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่