Bài 23

Một số lệnh làm việc với dữ liệu danh sách

Biết cách duyệt danh sách bằng toán tử in, biết và thực hiện được một số phương thức thường dùng với danh sách.

🚀

1. Khởi động (Engagement)

Trong bài trước chúng ta đã biết cách dùng lệnh append để thêm phần tử vào cuối một danh sách. Vậy Python có lệnh nào dùng để:

  • Xóa nhanh một danh sách?
  • Chèn thêm phần tử vào đầu hay giữa danh sách?
  • Kiểm tra một phần tử có nằm trong một danh sách không?

💡 Câu hỏi suy ngẫm: Em hãy nghĩ về các thao tác thường gặp với danh sách trong thực tế:

  • Kiểm tra xem một mặt hàng có trong giỏ hàng không
  • Chèn một học sinh mới vào giữa danh sách lớp
  • Xóa toàn bộ danh sách sau khi đã xử lý xong

Bài học hôm nay sẽ cung cấp cho em các công cụ mạnh mẽ để làm việc hiệu quả với danh sách.

📖

2. Hình thành kiến thức (Knowledge)

1. Duyệt danh sách với toán tử in

a) Kiểm tra phần tử trong danh sách

Toán tử in dùng để kiểm tra một phần tử có nằm trong danh sách đã cho không. Kết quả trả lại True (Đúng) hoặc False (Sai).

Cú pháp:

<giá trị> in <danh sách>
Python Script

Ví dụ:

A = [1, 2, 3, 4, 5]
2 in A      # True - Số nguyên 2 nằm trong dãy A
10 in A     # False - Số 10 không nằm trong dãy A
Python Script

b) Duyệt từng phần tử của danh sách

Có thể duyệt nhanh từng phần tử của danh sách bằng toán tử in và lệnh for mà không cần sử dụng lệnh range().

Cú pháp:

for <biến> in <danh sách>:
    <khối lệnh>
Python Script

Ví dụ:

A = [10, 11, 12, 13, 14, 15]
for k in A:
    print(k, end = "")
# Kết quả: 10 11 12 13 14 15
Python Script

Khi thực hiện lệnh này, biến k sẽ lần lượt nhận các giá trị trong dãy A.

2. Các phương thức làm việc với danh sách

a) Lệnh clear() - Xóa toàn bộ danh sách

A = [1, 2, 3, 4, 5]
A.clear()    # Sau khi thực hiện lệnh clear(), danh sách gốc trở thành rỗng
print(A)     # []
Python Script

b) Lệnh remove(value) - Xóa phần tử theo giá trị

Lệnh remove(value) sẽ xóa phần tử đầu tiên của danh sách có giá trị value. Nếu không có phần tử nào như vậy thì sẽ báo lỗi.

Ví dụ:

A = [1, 2, 3, 4, 5]
A.remove(1)
print(A)     # [2, 3, 4, 5]

A.remove(10) # ValueError: list.remove(x): x not in list
Python Script

c) Lệnh insert(index, value) - Chèn phần tử

Lệnh insert(index, value) sẽ chèn giá trị value vào danh sách tại vị trí index và đẩy các phần tử từ vị trí này sang phải.

Ví dụ:

A = [1, 2, 6, 10]
A.insert(2, 5)
print(A)     # [1, 2, 5, 6, 10]
Python Script

Lưu ý quan trọng:

  • Nếu index < 0 thì chèn vào đầu danh sách
  • Nếu index > len() thì chèn vào cuối danh sách

Ví dụ:

A = []
A.insert(-10, 1)  # Chèn số 1 vào đầu danh sách
A.insert(100, 2)  # Chèn số 2 vào cuối danh sách
print(A)          # [1, 2]
Python Script

3. Tóm tắt các lệnh làm việc với danh sách

LệnhChức năng
A.append(x)Bổ sung phần tử x vào cuối danh sách A
A.insert(k, x)Chèn phần tử x vào vị trí k của danh sách A
A.clear()Xóa toàn bộ dữ liệu của danh sách A
A.remove(x)Xóa phần tử x từ danh sách A
🧩

3. Luyện tập (Practice)

Bài tập thực hành

Bài tập 1:

Giả sử A = ["0", "1", "01", "10"]. Các biểu thức sau trả về giá trị đúng hay sai? a) 1 in A b) "01" in A

Bài tập 2:

Hãy giải thích ý nghĩa từ khóa in trong câu lệnh sau:

for i in range(10):
    print(i)
Python Script

Bài tập 3:

Khi nào thì lệnh A.append(1) và A.insert(0,1) có tác dụng giống nhau?

Bài tập 4:

Danh sách A trước và sau lệnh insert() là [1, 4, 10, 0] và [1, 4, 10, 5, 0]. Lệnh đã dùng là gì?

Thực hành tại máy:

Nhập số n từ bàn phím, sau đó nhập danh sách n tên học sinh trong lớp và in ra danh sách học sinh này, mỗi tên học sinh trên một dòng. Yêu cầu danh sách được in ra theo thứ tự ngược lại với thứ tự đã nhập.

Chương trình mẫu:

dsLop = []
n = int(input("Nhập số học sinh trong lớp: "))
for i in range(n):
    name = input("Nhập họ tên học sinh thứ " + str(i+1) + ": ")
    dsLop.insert(0, name)  # Chèn vào đầu danh sách
print("Danh sách học sinh đã nhập:")
for name in dsLop:
    print(name)
Python Script
🌟

4. Vận dụng (Application)

Bài tập vận dụng

Bài tập 1: Xóa các số âm

Cho trước dãy số A. Viết chương trình xóa đi các phần tử có giá trị nhỏ hơn 0 từ A.

Chương trình mẫu:

A = [0, 1, -3, -10, 5, 9, -20, 55]
i = 0
while i < len(A):
    if A[i] < 0:
        A.remove(A[i])
    else:
        i = i + 1
print(A)  # [0, 1, 5, 9, 55]
Python Script

Bài tập 2: Tìm mẫu trong dãy số

Cho trước dãy số A. Viết chương trình tìm và chỉ ra vị trí đầu tiên của dãy số A mà ba số hạng liên tiếp có giá trị là 1, 2, 3. Nếu tìm thấy thì thông báo vị trí tìm thấy, nếu không thì thông báo "Không tìm thấy mẫu".

Chương trình mẫu:

A = [0, 4, 0, 1, 2, 3, 8, 9, 0, 1, 2, 3, 17, -16, 0, 1, 2]
p = [1, 2, 3]
pkq = -1
i = 0
while i < len(A) - 3 and pkq == -1:
    if A[i] == p[0] and A[i+1] == p[1] and A[i+2] == p[2]:
        pkq = i
    else:
        i = i + 1

if pkq >= 0:
    print("Tìm thấy mẫu", p, "tại vị trí", pkq)
else:
    print("Không tìm thấy mẫu")
Python Script

Bài tập 3: Quản lý danh sách sản phẩm

Viết chương trình quản lý danh sách sản phẩm trong cửa hàng:

  • Thêm sản phẩm mới
  • Xóa sản phẩm theo tên
  • Kiểm tra sản phẩm có tồn tại không
  • In danh sách sản phẩm

Thảo luận:

  • Khi nào nên dùng for...in thay vì for range(len())?
  • Lỗi nào thường gặp khi dùng remove() trong vòng lặp?
  • Tại sao cần dùng while thay vì for khi xóa phần tử trong danh sách?

Ghi nhớ kiến thức 🎯

  • ✅ toán tử in kiểm tra phần tử trong danh sách, trả về True/False.
  • ✅ for...in duyệt nhanh từng phần tử của danh sách.
  • ✅ insert(k, x) chèn x vào vị trí k, đẩy các phần tử khác sang phải.
  • ✅ remove(x) xóa phần tử đầu tiên có giá trị x.
  • ✅ clear() xóa toàn bộ danh sách.
  • ✅ append(x) thêm x vào cuối danh sách.

Chúc mừng bạn đã hoàn thành bài học này! 🏆