บทที่ 6

ข้อมูลแบบรายการ - List

Python Lists

เรียนรู้การเก็บและจัดการข้อมูลหลายๆ ตัวในตัวแปรเดียว

🎯 จุดประสงค์การเรียนรู้

• เข้าใจแนวคิดของ List และการใช้งาน

• สร้าง เข้าถึง และแก้ไขข้อมูลใน List

• ใช้ Method ต่างๆ ของ List

• ประยุกต์ List กับ Loop ในการแก้ปัญหา

List คืออะไร?

List = รายการ หรือ ลิสต์

• คล้าย "ตะกร้า" ที่เก็บของหลายชิ้นไว้ด้วยกัน

• ใช้เก็บข้อมูลที่ต้องการจัดกลุ่ม เช่น ["กล้วย", "ส้ม", "แตงโม"]

• แต่ละชิ้นใน list เรียกว่า "สมาชิก" (element)

❌ แบบไม่มี List

friend1 = "สมชาย"
friend2 = "สมหญิง"
friend3 = "สมศักดิ์"
friend4 = "สมใจ"
friend5 = "สมพร"

✅ แบบมี List

friends = ["สมชาย", "สมหญิง", "สมศักดิ์",
           "สมใจ", "สมพร"]
# การสร้าง List ประเภทต่างๆ
numbers = [10, 20, 30, 40, 50]
scores = [85.5, 92.0, 78.5]
status = [True, False, True]
mixed = ["สมชาย", 16, 165.5, True]
💡 ข้อดี: เก็บข้อมูลหลายตัวในตัวแปรเดียว ใช้งานร่วมกับ Loop ได้ดี

สร้าง List และแสดงข้อมูล

สร้าง List ได้หลายแบบ

เลข [1, 2, 3]

ข้อความ ["แมว", "หมา"]

ผสมกัน ["A", 100, True]

scores = [90, 88, 75]
print(scores)
TIP: List ใน Python สามารถเก็บข้อมูลได้หลาย Data type

การเข้าถึงข้อมูลใน List

🔢 ใช้ Index (ลำดับ) ในการเข้าถึง

Python นับเริ่มจาก 0 และสามารถนับย้อนกลับได้

# รายชื่อนักเรียน
students = ["อานนท์", "บุญมี", "จิรา", "ดารา", "เอก"]

# Index:     0        1        2       3       4
# Index:    -5       -4       -3      -2      -1

# การเข้าถึงแบบปกติ (เริ่มจาก 0)
print(students[0])   # "อานนท์"
print(students[2])   # "จิรา"
print(students[4])   # "เอก"

# การเข้าถึงแบบย้อนกลับ (เริ่มจาก -1)
print(students[-1])  # "เอก" (คนสุดท้าย)
print(students[-2])  # "ดารา" (คนรองสุดท้าย)
len()

นับจำนวนสมาชิก

len(students)  # 5
Slicing

ตัดชิ้นส่วน

students[1:4]  # บุญมี,จิรา,ดารา
First & Last

ตัวแรกและสุดท้าย

students[0]    # ตัวแรก
students[-1]   # ตัวสุดท้าย
in Operator

ตรวจสอบสมาชิก

"จิรา" in students  # True

การแก้ไขข้อมูลใน List

✏️ List เป็น Mutable (เปลี่ยนแปลงได้)

สามารถเพิ่ม ลบ หรือแก้ไขข้อมูลใน List ได้

# สร้าง List เริ่มต้น
fruits = ["แอปเปิ้ล", "กล้วย", "ส้ม"]
print("เริ่มต้น:", fruits)

# การแก้ไขข้อมูล
fruits[1] = "มะม่วง"
print("แก้ไขแล้ว:", fruits)

# การเพิ่มข้อมูล
fruits.append("องุ่น")        # เพิ่มท้าย List
fruits.insert(1, "สับปะรด")  # แทรกตำแหน่งที่ 1
print("เพิ่มแล้ว:", fruits)

# การลบข้อมูล
fruits.remove("ส้ม")          # ลบตามค่า
deleted = fruits.pop()       # ลบตัวสุดท้าย
print("ลบแล้ว:", fruits)
print("ที่ถูกลบ:", deleted)

🏃‍♂️ ลองทำดู

สร้าง List ชื่อ colors ใส่สี 3 สี แล้วลองเพิ่มและลบสี

Methods ของ List

append()

เพิ่มท้าย List

numbers = [1, 2, 3]
numbers.append(4)
# [1, 2, 3, 4]
insert()

แทรกตำแหน่งใดๆ

numbers.insert(1, 1.5)
# [1, 1.5, 2, 3, 4]
remove()

ลบตามค่า

numbers.remove(1.5)
# [1, 2, 3, 4]
pop()

ลบและคืนค่า

last = numbers.pop()
# last = 4, numbers = [1,2,3]
# Methods อื่นๆ ที่มีประโยชน์
scores = [85, 92, 78, 96, 88]

# การเรียงลำดับ
scores.sort()                 # เรียงจากน้อยไปมาก
print("เรียงแล้ว:", scores)    # [78, 85, 88, 92, 96]

scores.reverse()             # กลับลำดับ
print("กลับลำดับ:", scores)  # [96, 92, 88, 85, 78]

# การค้นหา
position = scores.index(92)  # หาตำแหน่งของ 92
count = scores.count(88)     # นับจำนวน 88

# การล้างข้อมูล
scores.clear()              # ลบทุกตัว
print("ล้างแล้ว:", scores)    # []

List กับ Loop

🔄 การวนซ้ำข้อมูลใน List

List และ Loop ทำงานร่วมกันได้ดีมาก เหมาะสำหรับการประมวลผลข้อมูลจำนวนมาก

# วิธีที่ 1: วนซ้ำโดยตรง (แนะนำ)
subjects = ["คณิต", "วิทย์", "อังกฤษ", "สังคม"]

for subject in subjects:
    print(f"วิชา: {subject}")

# วิธีที่ 2: ใช้ index
for i in range(len(subjects)):
    print(f"ลำดับ {i+1}: {subjects[i]}")

# วิธีที่ 3: ใช้ enumerate (ได้ทั้ง index และ value)
for i, subject in enumerate(subjects):
    print(f"{i+1}. {subject}")
# ตัวอย่างการใช้งานจริง: คำนวณคะแนนเฉลี่ย
scores = [85, 92, 78, 96, 88]
total = 0

for score in scores:
    total += score

average = total / len(scores)
print(f"คะแนนเฉลี่ย: {average:.2f}")
💡 เทคนิค: ใช้ for item in list: เมื่อต้องการแค่ค่า ใช้ enumerate() เมื่อต้องการทั้งตำแหน่งและค่า

List Comprehension - สร้าง List แบบย่อ

⚡ วิธีสร้าง List ใหม่อย่างรวดเร็ว

เป็นวิธีการเขียนโค้ดแบบย่อที่ Python มีเฉพาะ ช่วยลดการเขียน Loop ยาวๆ

แบบ Loop ปกติ

# สร้าง List กำลังสอง
numbers = [1, 2, 3, 4, 5]
squares = []

for num in numbers:
    squares.append(num ** 2)

print(squares)  # [1, 4, 9, 16, 25]

✅ แบบ List Comprehension

# สร้าง List กำลังสอง
numbers = [1, 2, 3, 4, 5]

squares = [num ** 2 for num in numbers]

print(squares)  # [1, 4, 9, 16, 25]
# ตัวอย่างอื่นๆ ของ List Comprehension

# สร้าง List เลขคู่
even_numbers = [i for i in range(1, 11) if i % 2 == 0]
print(even_numbers)  # [2, 4, 6, 8, 10]

# แปลง String เป็นตัวพิมพ์ใหญ่
names = ["อานนท์", "บุญมี", "จิรา"]
upper_names = [name.upper() for name in names]
print(upper_names)

# สร้าง List คะแนนที่ผ่าน
all_scores = [45, 67, 89, 34, 78, 92]
passed_scores = [score for score in all_scores if score >= 50]
print(passed_scores)  # [67, 89, 78, 92]
💡 รูปแบบ: [expression for item in list if condition]

List ซ้อน List (Nested List)

ตารางข้อมูลใน list

list สามารถมีสมาชิกเป็น list ได้ เช่น ตารางคะแนน

scores = [
    [80, 90, 85],
    [70, 88, 95]
]
print(scores[0])     # [80, 90, 85]
print(scores[1][2]) # 95
💡 TIP: ใช้กับข้อมูลที่เป็นตาราง หรือ matrix ได้

🔖 แบบฝึกหัดท้ายบท

1. สร้าง list รายชื่อเพื่อน 3 คน

แล้วแสดงผลแต่ละชื่อในแต่ละบรรทัด

2. รับคะแนนสอบ 5 วิชา เก็บใน list

แล้วหาค่าเฉลี่ยคะแนน

3. (ท้าทาย) สร้าง list ซ้อน list แสดงคะแนนสอบ 3 คน 2 วิชา

แล้วแสดงคะแนนของแต่ละคนในแต่ละวิชา

4. (ท้าทาย) ใช้ list comprehension สร้าง list ตัวเลขที่ยกกำลังสองของ 1-10

ลองทำดู! ถ้าทำได้ทั้งหมด แปลว่าเข้าใจเรื่อง List แล้วจริงๆ 😊