🐍 Bài Giảng 2: List - Thêm, Xóa và Cập Nhật

List: khả năng **thay đổi** (mutable) dữ liệu. Hãy cùng nhau học cách Thêm, Xóa và Cập nhật dữ liệu một!

🎯 Mục Tiêu Bài Giảng

Kiến thức

Nắm vững các phương thức để thêm (`append`, `insert`, `extend`) và xóa (`del`, `pop`, `remove`) phần tử khỏi List.

Kỹ năng

Biết cách chọn phương thức thêm/xóa phù hợp với yêu cầu (thêm vào cuối, thêm vào vị trí, xóa theo giá trị, xóa theo vị trí).

⏱️ Phân Bổ Thời Gian (120 phút)

3 cách cơ bản để thêm phần tử vào List. Tùy vào việc bạn muốn thêm vào cuối hay chen vào giữa, bạn sẽ có công cụ phù hợp!

1. append() - Thêm một phần tử vào cuối

Công dụng: Phương thức đơn giản nhất, giúp thêm **một phần tử** mới vào **cuối** List.

scores = [7, 8, 9]
scores.append(10)
print(scores) # Kết quả: [7, 8, 9, 10]

2. insert() - Thêm vào vị trí chỉ định

Công dụng: Thêm **một phần tử** vào **vị trí (index) cụ thể** mà bạn muốn.

Cú pháp: `list.insert(index, item)`

fruits = ['apple', 'banana', 'kiwi']
# Chèn 'orange' vào vị trí 1 (sau 'apple', trước 'banana')
fruits.insert(1, 'orange')
print(fruits) # Kết quả: ['apple', 'orange', 'banana', 'kiwi']

3. extend() - Mở rộng List bằng List khác

Công dụng: Thêm **tất cả các phần tử** của một List (hoặc iterable) khác vào **cuối** List hiện tại.

🔥 Lưu ý: Phân biệt `append()` và `extend()` khi dùng với List!

Phương thức Kết quả
`list1.extend(list2)` Thêm TỪNG PHẦN TỬ của list2 vào list1. (Làm phẳng List)
`list1.append(list2)` Thêm CẢ LIST 2 như một PHẦN TỬ DUY NHẤT vào list1. (Tạo List lồng nhau)
list1 = [1, 2]
list2 = [3, 4]

# Sử dụng EXTEND
list_e = list1.copy()
list_e.extend(list2)
print(list_e) # Kết quả: [1, 2, 3, 4]

# Sử dụng APPEND (sai mục đích)
list_a = list1.copy()
list_a.append(list2)
print(list_a) # Kết quả: [1, 2, [3, 4]]

List là mutable, nên chúng ta có thể loại bỏ các phần tử không cần thiết. 3 cách để "xóa sổ" dữ liệu khỏi List, mỗi cách có một mục đích riêng biệt!

1. Lệnh del - Xóa theo Index hoặc Cắt lát

Công dụng: Xóa vĩnh viễn **phần tử tại vị trí chỉ định** (index) hoặc **một dải các phần tử** (slice).

💡 Lưu ý: `del` là một lệnh của Python, không phải phương thức của List.

my_list = ['A', 'B', 'C', 'D', 'E']

# Xóa phần tử tại index 2 ('C')
del my_list[2]
print(my_list) # Kết quả: ['A', 'B', 'D', 'E']

# Xóa dải phần tử từ index 1 đến 3 (không bao gồm 3)
del my_list[1:3]
print(my_list) # Kết quả: ['A', 'E']

2. pop() - Xóa và Trả về giá trị

Công dụng: Xóa phần tử theo chỉ mục và **trả về giá trị** của phần tử đó (rất hữu ích khi cần dùng lại giá trị vừa xóa).

Cú pháp: `removed_item = my_list.pop(index)`

scores = [10, 20, 30]

# pop() không đối số: Xóa phần tử cuối cùng
last_score = scores.pop()
print(last_score) # Kết quả: 30
print(scores) # Kết quả: [10, 20]

# pop(index): Xóa phần tử tại index 0
first_score = scores.pop(0)
print(first_score) # Kết quả: 10
print(scores) # Kết quả: [20]

3. remove() - Xóa theo Giá trị

Công dụng: Xóa **phần tử đầu tiên** có **giá trị trùng khớp** được cung cấp.

Cú pháp: `my_list.remove('value')`

names = ['An', 'Binh', 'An', 'Chinh']

# Xóa giá trị 'An' đầu tiên tìm thấy
names.remove('An')
print(names) # Kết quả: ['Binh', 'An', 'Chinh']

# LƯU Ý: Gây lỗi ValueError nếu giá trị không tồn tại
# names.remove('Dung') # Lệnh này sẽ gây lỗi!

Cập nhật giá trị List và ôn lại một số hàm cơ bản quan trọng!

1. Cập Nhật (Update) Phần Tử

Vì List là kiểu dữ liệu có thể thay đổi (**mutable**), chúng ta có thể gán giá trị mới cho một Index cụ thể:

Cú pháp: `my_list[index] = new_value`

grades = ['A', 'B', 'C', 'D']
# Cập nhật điểm tại index 1 từ 'B' thành 'A+'
grades[1] = 'A+'
print(grades) # Kết quả: ['A', 'A+', 'C', 'D']

2. Hàm và Toán tử cơ bản

Hàm/Toán tử Mục đích
`len(my_list)` Trả về độ dài (số lượng phần tử) của List.
`item in my_list` Kiểm tra xem một phần tử có tồn tại trong List hay không (trả về `True`/`False`).

Hãy thực hành từng nhóm chức năng một cách chi tiết.

Bài tập Thực hành 1: Thêm Phần Tử

Cho List ban đầu: `inventory = ['bàn', 'ghế', 'tủ']`

  1. Dùng `append()` để thêm **'máy tính'** vào cuối List.
  2. Dùng `insert()` để chèn **'quạt'** vào vị trí đầu tiên (Index 0).
  3. Dùng `extend()` để thêm List `new_items = ['kệ', 'đèn']` vào cuối.

Bài tập Thực hành 2: Xóa Phần Tử

Cho List ban đầu: `players = ['An', 'Binh', 'Chi', 'Dung', 'Em']`

  1. Dùng `del` để xóa người chơi ở vị trí thứ 2 (Index 1).
  2. Dùng `pop()` để xóa người chơi cuối cùng và lưu tên người đó vào biến `removed_player`.
  3. Dùng `remove()` để xóa người chơi tên **'Chi'**.

Bài tập Tổng Hợp (Thêm, Xóa, Cập Nhật)

Mô phỏng việc quản lý danh sách điểm danh lớp học (giống bài tập cuối giờ):

danh_sach = ['Binh', 'Hung', 'Tuan', 'Thao', 'An', 'Mai']
  1. Thêm **"Phuong"** vào cuối.
  2. Thêm **"Chien"** (chuyển lớp) vào vị trí thứ 3 (Index 2).
  3. Xóa học sinh có tên **"An"** khỏi danh sách.
  4. Cập nhật tên học sinh ở vị trí đầu tiên (Index 0) thành **"Khanh"**.