Module 4a — ทบทวน (Review)

Collection Data Types: List — แบบฝึกทบทวน

ทบทวน Module 4a 📝

  • Multiple Choice — เลือกคำตอบที่ถูก แล้วกดถัดไปเพื่อดูเฉลย
  • เติมคำในช่องว่าง — ลองพิมพ์ใน Live Code แล้วรัน
  • ทำนายผล · ไล่ค่าตัวแปร · หา Bug — ฝึกอ่านโค้ดให้เข้าใจจริง

. . .

Note

ครอบคลุม: สร้าง/เข้าถึง List · index/slice/len() · เพิ่ม/ลบ · ค้นหา · เรียงลำดับ · สถิติ ทบทวนเนื้อหาเต็มได้ที่ Module 4a 👈

Multiple Choice 🔘

เลือกคำตอบที่ถูกต้อง — เฉลยจะปรากฏเมื่อกดถัดไป

คำถาม #1

ข้อใดสร้าง list ว่าง?

A. ()
B. []
C. {}
D. set()

Tip

ตอบ: B[] คือ list ว่าง ( () คือ tuple ว่าง, {} คือ dict ว่าง )

คำถาม #2

List เก็บข้อมูล ต่างชนิด ในลิสต์เดียวกันได้หรือไม่?

A. ได้
B. ไม่ได้ ต้องชนิดเดียวกันทั้งหมด
C. ได้ แต่จำกัดไม่เกิน 2 ชนิด

Tip

ตอบ: A — เช่น [1, "hello", 3.4, True] เก็บคละชนิดได้

คำถาม #3

data = [10, 20, 30, 40]data[0] คือค่าใด?

A. 10
B. 20
C. 40
D. error

Tip

ตอบ: A — index เริ่มที่ 0 เสมอ → data[0] = ตัวแรก = 10

คำถาม #4

data = [10, 20, 30, 40]data[-1] คือค่าใด?

A. 10
B. 40
C. -1
D. error

Tip

ตอบ: B — index ติดลบ นับจากท้าย → data[-1] = ตัวสุดท้าย = 40

คำถาม #5

len([5, 6, 7]) ให้ค่าใด?

A. 2
B. 3
C. 4

Tip

ตอบ: Blen() นับจำนวนสมาชิก = 3 (index มีค่า 0 ถึง len()-1)

คำถาม #6

a = [0, 1, 2, 3, 4]a[1:4] ได้ผลใด?

A. [1, 2, 3, 4]
B. [1, 2, 3]
C. [0, 1, 2, 3]

Tip

ตอบ: B — slice [start:stop] ไม่รวม ตัวที่ตำแหน่ง stop → ได้ index 1,2,3

คำถาม #7: ชวนคิด

a = [10, 20, 30]a[1.0] (ใช้ float เป็น index) จะเกิดอะไร?

A. ได้ 20
B. TypeError
C. ได้ 10

Important

ตอบ: B — index ต้องเป็น int เท่านั้น → ใช้ float เกิด TypeError (ใช้ a[2//2] แทน)

คำถาม #8

3 in [1, 2, 3] ให้ผลใด?

A. True
B. False
C. 2

Tip

ตอบ: A — operator in ตรวจสมาชิก ได้ผลเป็น bool

คำถาม #9: ชวนคิด

result = nums.sort()result มีค่าใด?

A. list ที่เรียงแล้ว
B. None
C. list ต้นฉบับ (ไม่เรียง)

Important

ตอบ: B (None).sort() เรียง in-place (แก้ list เดิม) แล้วคืน None — ถ้าอยากได้ list ใหม่ใช้ sorted(nums)

คำถาม #10: ชวนคิด

a = [1, 2]a.append([3, 4]) ทำให้ a เป็นอย่างไร?

A. [1, 2, 3, 4]
B. [1, 2, [3, 4]]
C. error.append() รับได้แค่ตัวเลขเท่านั้น

Important

ตอบ: B.append() เพิ่ม [3,4] เป็น 1 สมาชิก (list ซ้อน) — ถ้าอยากได้ [1,2,3,4] ใช้ .extend([3,4])

คำถาม #11

data = [10, 20, 30]data.pop() (ไม่ระบุ index) ลบตัวใด?

A. ตัวแรก (10)
B. ตัวสุดท้าย (30)
C. ทั้งหมด

Tip

ตอบ: B.pop() ไม่ระบุ index → ลบ (และคืนค่า) ตัวสุดท้าย

คำถาม #12

['a', 'b', 'c'].remove('b') ทำให้ list เป็นอย่างไร?

A. ['a', 'c']
B. ['b']
C. ['a', 'b']

Tip

ตอบ: A.remove(x) ลบ ด้วยค่า (ตัวแรกที่เจอ) ส่วน .pop(i) ลบด้วย index

คำถาม #13

[1, 2] + [3, 4] ให้ผลใด?

A. [4, 6]
B. [1, 2, 3, 4]
C. [[1,2],[3,4]]

Tip

ตอบ: B+ กับ list คือ concatenation (นำมาต่อกัน)

คำถาม #14

[0] * 3 ให้ผลใด?

A. [0, 3]
B. [0, 0, 0]
C. 0

Tip

ตอบ: B* กับ list คือ repetition (ทำซ้ำ) — นิยมใช้สร้าง list ค่าเริ่มต้น

คำถาม #15

[10, 20, 30].index(30) ให้ค่าใด?

A. 2
B. 3
C. 30

Tip

ตอบ: A.index(x) คืน ตำแหน่ง (index) ของ x30 อยู่ index 2

คำถาม #16: ชวนคิด

a = [3, 1, 2] แล้ว b = sorted(a) — หลังจากนั้น a เป็นอย่างไร?

A. [1, 2, 3]
B. [3, 1, 2] (ไม่เปลี่ยน)
C. error — ต้องใช้ a.sort() แทน sorted()

Important

ตอบ: Bsorted() คืน list ใหม่ ไม่แก้ของเดิม (ต่างจาก .sort() ที่แก้ in-place)

เติมคำในช่องว่าง ✏️

เติมโค้ดในช่อง ____ แล้วกด Run

เติมคำ #17

สร้าง list lst เก็บ 1, 2, 3, 40, 50, 60 แล้ว แสดงจำนวนสมาชิก

lst = [1, 2, 3, 40, 50, 60]
print(lst)
print(len(lst))
[1, 2, 3, 40, 50, 60]
6

เติมคำ #18

เพิ่ม 11 เข้า list แล้ว เรียงลำดับ จากน้อยไปมาก

data = [16, 2, 77, 40]
data.append(11)
data.sort()
print(data)
[2, 11, 16, 40, 77]

เติมคำ #19

ใช้ slice ดึงข้อมูล ทุกตำแหน่งเว้น 1 (index 0, 2, 4, …)

a = [0, 1, 2, 3, 4, 5]
print(a[::2])
[0, 2, 4]

เติมคำ #20

คำนวณ ค่าเฉลี่ย ของคะแนนใน list

scores = [10, 20, 30, 40]
average = sum(scores) / len(scores)
print(average)
25.0

เติมคำ #21

หา ค่ามากสุด และ ค่าน้อยสุด ใน list

data = [16, 2, 77, 40, 11]
print(max(data))
print(min(data))
77
2

เติมคำ #22: ชวนคิด

รับข้อมูลหลายค่าเป็น List ด้วย .split()

raw = '10 20 30 40 50'   # input()
data = raw.split()
print(data)
print(len(data))
['10', '20', '30', '40', '50']
5

ได้ List ของ string — ถ้าต้องการตัวเลขต้องแปลงชนิดอีกที

เติมคำ #23

ใช้ .insert() แทรกค่า 99 ที่ ตำแหน่ง index 1

data = [10, 20, 30]
data.insert(1, 99)
print(data)
[10, 99, 20, 30]

เติมคำ #24

ลบค่า 20 ด้วยค่า แล้วลบตัวที่ index 0 ด้วย index

data = [10, 20, 30, 40]
data.remove(20)    # ลบด้วยค่า
data.pop(0)        # ลบด้วย index
print(data)
[30, 40]

เติมคำ #25

เรียงลำดับ จากมากไปน้อย โดยใช้ sorted()

nums = [3, 1, 4, 1, 5]
print(sorted(nums, reverse=True))
[5, 4, 3, 1, 1]

เติมคำ #26: ชวนคิด

นับว่าเลข 2 ปรากฏใน list กี่ครั้ง ด้วย .count()

data = [1, 2, 2, 3, 2]
print(data.count(2))
3

ทำนายผล 🔮

โค้ดจะพิมพ์อะไร? — ทายก่อน แล้วกดถัดไปดูเฉลย

ทำนายผล #27

a = [1, 2, 3]
a.append(4)
a.insert(0, 9)
print(a)

Tip

ผลลัพธ์: [9, 1, 2, 3, 4]append(4) ต่อท้าย → insert(0, 9) แทรกที่หัว

ทำนายผล #28: ชวนคิด

a = [0, 1, 2, 3, 4]
print(a[1:4], a[::2])

Important

ผลลัพธ์: [1, 2, 3] [0, 2, 4][1:4] = index 1–3 (ไม่รวม 4) · [::2] = ทุกตำแหน่งเว้น 1

ไล่ค่าตัวแปร 🔍

ไล่ค่า list ทีละคำสั่ง

ไล่ค่าตัวแปร #29: ชวนคิด

a = [3, 1, 2]
a.append(5)
a.sort()
a.pop()

เติมค่า a หลังแต่ละบรรทัด

บรรทัด คำสั่ง a
1 a = [3, 1, 2] ?
2 a.append(5) ?
3 a.sort() ?
4 a.pop() ?

Tip

บรรทัด a
1 [3, 1, 2]
2 [3, 1, 2, 5]
3 [1, 2, 3, 5]
4 [1, 2, 3]

.pop() ไม่ระบุ index → ลบตัวสุดท้าย (5)

หา Bug 🐞

โค้ดผิดตรงไหน — ทำไม

หา Bug #30: ชวนคิด

nums = [3, 1, 2]
nums = nums.sort()      # อยากได้ list ที่เรียงแล้ว
print(nums)

ได้ None — ผิดตรงไหน?

Important

ผิด: .sort() เรียง in-place แล้วคืน None → ไปเก็บทับ nums เป็น None แก้: nums.sort() เฉย ๆ (แล้ว print(nums)) หรือใช้ nums = sorted(nums)

Engineering Application 🔧

จัดการข้อมูลการวัดด้วย List

Engineering #31

หาค่าเฉลี่ยอุณหภูมิรายวัน (°C)

temps = [28.5, 30.1, 29.8, 31.2, 27.9]
avg = sum(temps) / len(temps)
print(f'{avg:.2f}')
29.50

Engineering #32: ค่าสูง/ต่ำสุด

readings = [3.2, 5.1, 2.8, 6.0, 4.4]
print(max(readings), min(readings))

Tip

ผลลัพธ์: 6.0 2.8max/min หาค่ามาก/น้อยสุดของชุดข้อมูลการวัด

Engineering #33: หน้าต่างข้อมูลล่าสุด

เติม slice ให้ดึง 3 ค่าล่าสุด ของข้อมูลเซนเซอร์

readings = [12, 15, 9, 20, 18, 25]
print(readings[-3:])
[20, 18, 25]

ท้าทาย 🔥

trap ที่คนพลาดบ่อย — List เป็น “reference”

ท้าทาย #34: List อ้างอิงตัวเดียวกัน

a = [1, 2, 3]
b = a           # ไม่ได้ copy — b ชี้ list เดียวกับ a
b[0] = 99
print(a)

a เป็นอะไร? (ระวัง!)

Important

ผลลัพธ์: [99, 2, 3]b = a ทำให้ทั้งคู่ชี้ list เดียวกัน → แก้ b กระทบ a ถ้าต้องการสำเนาแยก: b = a.copy() หรือ b = a[:]

จบการทบทวน 🎉

ทบทวนเนื้อหาเต็มได้ที่ Module 4a · ไปต่อ Module 4b