Bài 22

Kiểu dữ liệu danh sách (List)

Biết được kiểu dữ liệu danh sách (list), cách khởi tạo và truy cập từng phần tử của danh sách, biết và thực hiện được cách duyệt các phần tử của danh sách bằng lệnh for, thực hành được một số phương thức đơn giản trên dữ liệu danh sách.

🚀

1. Khởi động (Engagement)

Em đã được học những kiểu dữ liệu cơ bản của Python như số nguyên, số thực, xâu kí tự, kiểu dữ liệu logic. Tuy nhiên, khi em cần lưu một dãy các số hay một danh sách học sinh thì cần kiểu dữ liệu dạng danh sách (còn gọi là dãy hay mảng).

💡 Câu hỏi suy ngẫm: Em hãy tìm một số dữ liệu kiểu danh sách thường gặp trên thực tế.

Ví dụ:

  • Danh sách điểm của các học sinh trong lớp
  • Danh sách các mặt hàng trong siêu thị
  • Danh sách bài hát trong playlist
  • Danh sách bạn bè trong danh bạ điện thoại

Kiểu dữ liệu danh sách được dùng nhiều nhất trong Python là kiểu list.

📖

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

1. Kiểu dữ liệu danh sách (List)

List là kiểu dữ liệu danh sách (dãy, mảng) trong Python. Tạo list bằng lệnh gán với các phần tử trong cặp dấu ngoặc [].

a) Khởi tạo danh sách

Cú pháp:

<tên_danh_sách> = [<giá trị 1>, <giá trị 2>, ..., <giá trị n>]
Python Script

Đặc điểm:

  • Các phần tử của danh sách có thể có các kiểu dữ liệu khác nhau
  • Các giá trị cách nhau bởi dấu phẩy
  • Có thể tạo danh sách rỗng

Ví dụ:

A = [1, 2, 3, 4, 5]
B = [1.5, 2, "Python", "List", 0]
a = []  # Danh sách rỗng
Python Script

b) Truy cập phần tử

Truy cập hoặc thay đổi giá trị của từng phần tử thông qua chỉ số:

<tên_danh_sách>[<chỉ số>]
Python Script

Quy tắc quan trọng:

  • Chỉ số của danh sách bắt đầu từ 0 đến len() - 1
  • len() là lệnh tính độ dài danh sách

Ví dụ:

A = [1, 2, 3, 4, 5]
A[0]    # 1
B = [1.5, 2, "Python", "List", 0]
B[2]    # 'Python'
Python Script

2. Duyệt các phần tử của danh sách

Hoạt động 2: Dùng lệnh for để duyệt danh sách

Quan sát các lệnh sau để biết cách dùng lệnh for duyệt lần lượt các phần tử của một danh sách.

Ví dụ 1: Duyệt và in ra từng phần tử của danh sách

A = [1,2,3,4,5]
for i in range(len(A)):  # Biến i chạy trên vùng chỉ số từ 0 đến len(A) - 1
    print(A[i], end = " ")
# Kết quả: 1 2 3 4 5
Python Script

Ví dụ 2: Duyệt và in một phần của danh sách

A = [3, 2, 1, 5, 6, 10, 7, 12, 18]
for i in range(2,5):
    print(A[i], end = " ")
# Kết quả: 1 5 6
Python Script

Giải thích:

  • Hai ví dụ trên cho thấy dùng lệnh for kết hợp với lệnh range() để duyệt từng phần tử của danh sách
  • Có thể duyệt lần lượt các phần tử của danh sách bằng lệnh for kết hợp với vùng giá trị của lệnh range()

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

Bài tập 1: Giải thích các lệnh ở mỗi câu sau thực hiện công việc gì?

# a)
S = 0
for i in range(len(A)):
    if A[i] > 0:
        S = S + A[i]
print(S)
# => Tính tổng các phần tử dương trong danh sách A

# b)
C = 0
for i in range(len(A)):
    if A[i] > 0:
        C = C + 1
print(C)
# => Đếm số lượng phần tử dương trong danh sách A
Python Script

Bài tập 2: Cho dãy các số nguyên A, viết chương trình in ra các số chẵn của A.

Gợi ý:

for i in range(len(A)):
    if A[i] % 2 == 0:
        print(A[i], end = " ")
Python Script

3. Thêm phần tử vào danh sách

Python có những lệnh đặc biệt để thêm phần tử vào một danh sách. Các lệnh này được thiết kế riêng cho kiểu dữ liệu danh sách và còn được gọi là phương thức (method) của danh sách.

Hoạt động 3: Tìm hiểu lệnh thêm phần tử cho danh sách

Quan sát các lệnh sau đây để biết cách thêm phần tử vào một danh sách bằng phương thức append().

Ví dụ: Thêm phần tử vào cuối danh sách

A = [1,2]
A.append(10)
print(A)  # [1, 2, 10]
Python Script

Chú ý cách dùng phương thức append():

  • Gõ tên biến danh sách, dấu ".", sau đó gõ append
  • Ví dụ: dsLop.append(name)

Tổng kết về phương thức:

  • Python có một số lệnh dành riêng (phương thức) cho dữ liệu kiểu danh sách
  • Cú pháp các lệnh đó như sau: tên_danh_sách.tên_phương_thức()
  • Lệnh thêm phần tử vào cuối danh sách là .append()

Câu hỏi suy ngẫm:

  • Sau khi thêm một phần tử vào danh sách A bằng lệnh append() thì độ dài danh sách A thay đổi như thế nào?
  • Danh sách A sẽ như thế nào sau các lệnh sau?
A = [2,4,10,1,0]
A.append(100)
del A[1]
# => A = [2, 100, 10, 1, 0]
Python Script

Lưu ý quan trọng:

  • Phương thức append() luôn thêm phần tử vào CUỐI danh sách
  • Khi duyệt danh sách bằng for + range(), chỉ số chạy từ 0 đến len()-1
  • range(start, end) chạy từ start đến end-1

4. Thay đổi và xóa phần tử

a) Thay đổi giá trị phần tử

Sử dụng lệnh gán để thay đổi giá trị từng phần tử:

A = [1, 2, 3, 4, 5]
A[1] = "One"
print(A)    # [1, 'One', 3, 4, 5]
Python Script

b) Xóa phần tử

Sử dụng lệnh del để xóa một phần tử của danh sách:

A = [1, 'One', 3, 4, 5]
del A[4]
print(A)    # [1, 'One', 3, 4]
Python Script

c) Các phép toán với danh sách

  • len(A): Tính độ dài của danh sách
  • Phép ghép (+): Ghép hai danh sách

Ví dụ:

a = []  # Danh sách rỗng có độ dài bằng 0
len(a)  # 0

[1, 2] + [3, 4, 5, 6]  # [1, 2, 3, 4, 5, 6]
Python Script
🧩

3. Luyện tập (Practice)

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

Bài tập 1:

Cho danh sách A = [1, 0, "One", 9, 15, "Two", True, False]. Hãy cho biết giá trị các phần tử: a) A[0] b) A[2] c) A[7] d) A[len(A)]

Bài tập 2:

Giả sử A là một danh sách các số, mỗi lệnh sau thực hiện công việc gì? a) A = A + [10] b) del A[0] c) A = [100] + A d) A = A[1]*25

Bài tập 3:

Cho dãy các số nguyên A, viết chương trình in ra các số chẵn của A.

Gợi ý:

for i in range(len(A)):
    if A[i] % 2 == 0:
        print(A[i], end = " ")
Python Script

Bài tập 4:

Viết lệnh xóa phần tử cuối cùng của danh sách A bằng lệnh del.

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 các bạn lớp em và in ra danh sách các tên đó, mỗi tên trên một dòng.

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.append(name)
print("Danh sách học sinh đã nhập:")
for i in range(len(dsLop)):
    print(dsLop[i])
Python Script
🌟

4. Vận dụng (Application)

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

Bài tập 1: Tính tổng và trung bình dãy số

Nhập một dãy số từ bàn phím. Tính tổng, trung bình của dãy và in dãy số trên một hàng ngang.

Chương trình mẫu:

A = []
T = 0
n = int(input("Nhập số tự nhiên n: "))
for i in range(n):
    num = int(input("Nhập số thứ " + str(i+1)+": "))
    A.append(num)
    T = T + num

print("Dãy số đã nhập:")
for i in range(n):
    print(A[i], end = " ")
print()
print("Tổng:", T)
print("Trung bình:", T/n)
Python Script

Bài tập 2: Tìm phần tử lớn nhất

Cho dãy số A. Viết chương trình tìm giá trị và chỉ số của phần tử lớn nhất của A. Tương tự với bài toán tìm phần tử nhỏ nhất.

Gợi ý:

max_val = A[0]
max_index = 0
for i in range(1, len(A)):
    if A[i] > max_val:
        max_val = A[i]
        max_index = i
print("Phần tử lớn nhất:", max_val, "tại chỉ số", max_index)
Python Script

Bài tập 3: Sắp xếp danh sách

Viết chương trình nhập danh sách các số và sắp xếp theo thứ tự tăng dần.

Gợi ý: Có thể dùng phương thức sort() của danh sách: A.sort()

Thảo luận:

  • Lợi ích của việc dùng danh sách so với dùng nhiều biến riêng lẻ?
  • Khi nào nên dùng chỉ số âm trong danh sách?
  • Phương thức append() có tác dụng gì?

Ghi nhớ kiến thức 🎯

  • ✅ List là kiểu dữ liệu danh sách trong Python, tạo bằng [].
  • ✅ Chỉ số bắt đầu từ 0, truy cập bằng danh_sách[chỉ_số].
  • ✅ len() tính độ dài danh sách.
  • ✅ append() thêm phần tử vào cuối danh sách.
  • ✅ del xóa phần tử tại chỉ số cụ thể.
  • ✅ for + range(len()) dùng để duyệt danh sách.

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