Tin học 10 – Bài 22. Kiểu dữ liệu danh sách

Mục tiêu bài học

Sau khi hoàn thành bài học này, học sinh sẽ có khả năng:

  • Về kiến thức: 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.
  • Về kĩ năng:
    • 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 như thêm, xoá, thay đổi phần tử.
  • Về phẩm chất: Hình thành ý thức trách nhiệm, tính cẩn thận, chăm chỉ và chuyên cần để hoàn thành nhiệm vụ học tập.

Hoạt động khởi động

Trong các bài trước, chúng ta đã làm quen với các kiểu dữ liệu cơ bản như số nguyên, số thực, xâu kí tự. Các kiểu dữ liệu này là dạng “đơn”, tức là mỗi biến chỉ lưu được một giá trị. Tuy nhiên, trong thực tế, chúng ta thường có nhu cầu lưu trữ một tập hợp nhiều giá trị, ví dụ như danh sách học sinh trong lớp, danh sách các món đồ cần mua, hay một dãy các số đo nhiệt độ. Kiểu dữ liệu danh sách (list) trong Python ra đời để giải quyết nhu cầu này.

Em hãy tìm một số ví dụ về dữ liệu kiểu danh sách thường gặp trên thực tế.

Một số ví dụ về dữ liệu kiểu danh sách trong thực tế bao gồm:
Danh sách học sinh của một lớp.
Danh sách các món hàng cần đi chợ.
Danh sách các số điện thoại trong danh bạ.
Một dãy các số liệu thống kê (ví dụ: nhiệt độ các ngày trong tháng).


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

Kiểu dữ liệu danh sách (list) trong Python được dùng để lưu trữ một dãy các giá trị.

  • Khởi tạo: Danh sách được tạo bằng cách đặt các phần tử bên trong cặp dấu ngoặc vuông [], các phần tử cách nhau bởi dấu phẩy.
  • Đặc điểm: Các phần tử trong một danh sách có thể có các kiểu dữ liệu khác nhau (số nguyên, số thực, xâu kí tự,…).
  • Truy cập: Ta có thể truy cập từng phần tử của danh sách thông qua chỉ số (index). Chỉ số được đánh số từ 0.
    • Cú pháp: <tên_danh_sách>[<chỉ_số>]
  • Thao tác cơ bản:
    • Thay đổi giá trị: Dùng lệnh gán để thay đổi giá trị của một phần tử. Ví dụ: A[1] = “mới”
    • Xóa phần tử: Dùng lệnh del. Ví dụ: del A[4]
    • Lấy độ dài: Dùng hàm len(<tên_danh_sách>) để biết số lượng phần tử.
    • Ghép danh sách: Dùng phép toán + để nối hai danh sách với nhau.
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)]

a) A[0] có giá trị là 1.
b) A[2] có giá trị là “One”.
c) A[7] có giá trị là False.
d) A[len(A)] sẽ gây ra lỗi chỉ số (index error).

⚠️ Vì độ dài của danh sách A là 8 (len(A) bằng 8), nên chỉ số hợp lệ chạy từ 0 đến 7. A[8] nằm ngoài phạm vi hợp lệ.

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

a) A = A + [10]: Bổ sung phần tử có giá trị 10 vào cuối danh sách A.
b) del A[0]: Xóa phần tử đầu tiên (có chỉ số 0) của danh sách A.
c) A = [100] + A: Thêm số 100 vào đầu danh sách A.
d) A = A[1]*25: Lệnh này sẽ gây lỗi. Phép nhân * không được định nghĩa cho một danh sách với một số nguyên theo cách này. Nếu A[1] là một số, thì A sẽ trở thành một số, không còn là danh sách. Nếu A là một biến mới thì nó sẽ được gán giá trị bằng tích của phần tử thứ hai của danh sách cũ với 25.

Lưu ý: trong trường hợp d, câu lệnh này sẽ thiết lập biến A mới, không còn là danh sách nữa mà là một giá trị số bằng tích của phần tử thứ hai của danh sách A ban đầu với 25.


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

Để xử lí tất cả các phần tử trong một danh sách, ta cần duyệt qua chúng một cách lần lượt. Cách phổ biến nhất là dùng vòng lặp for kết hợp với hàm range().

Vòng lặp for i in range(len(A)) sẽ tạo ra một biến i chạy qua các chỉ số hợp lệ của danh sách A, từ 0 đến len(A) – 1. Bên trong vòng lặp, ta có thể dùng A[i] để truy cập và xử lí từng phần tử.

Ví dụ: In ra các phần tử của danh sách

A = [1, 2, 3, 4, 5]
for i in range(len(A)):
    print(A[i], end=" ")
# Kết quả: 1 2 3 4 5
Giải thích cách làm việc của các đoạn mã sau đây?

a)


S = 0
for i in range(len(A)):
    if A[i] > 0:
        S = S + A[i]
print(S)

✅ Đoạn lệnh này tính tổng các số dương có trong danh sách A.

b)


C = 0
for i in range(len(A)):
    if A[i] > 0:
        C = C + 1
print(C)

✅ Đoạn lệnh này đếm số lượng các số dương có trong danh sách A.

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.

Chương trình có thể được viết như sau:

# Giả sử A đã được cho trước
A = [1, 5, 7, 4, 18, 20, 23]

# Duyệt qua từng phần tử của danh sách A
for i in range(len(A)):
    # Kiểm tra nếu phần tử là số chẵn
    if A[i] % 2 == 0:
        print(A[i], end=" ")

# Kết quả: 4 18 20

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

Python cung cấp các lệnh đặc biệt được thiết kế riêng cho kiểu dữ liệu danh sách, gọi là phương thức (method).

  • Cú pháp: <tên_danh_sách>.<tên_phương_thức>()
  • Phương thức append(): Dùng để thêm một phần tử vào cuối danh sách.

Ví dụ:

A = [1, 2]
A.append(10)
print(A)
# Kết quả: [1, 2, 10]
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?

Độ dài của danh sách A (giá trị trả về bởi len(A)) sẽ tăng lên một đơn vị.

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, 4, 10, 1, 0]: A được khởi tạo.
A.append(100): Thêm 100 vào cuối, A trở thành [2, 4, 10, 1, 0, 100].
del A[1]: Xóa phần tử ở chỉ số 1 (là số 4).
Kết quả cuối cùng, A sẽ là: [2, 10, 1, 0, 100].


Luyện tập

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

Để xoá phần tử cuối cùng, chúng ta cần biết chỉ số của nó. Chỉ số của phần tử cuối cùng là len(A) – 1.
Vậy lệnh để xoá là:
del A[len(A) – 1]

2. Có thể thêm một phần tử vào đầu danh sách được không? Nếu có thì nêu cách thực hiện.

Có thể. Chúng ta có thể dùng phép toán ghép danh sách + để thực hiện việc này. Ta tạo một danh sách mới chỉ chứa phần tử cần thêm, sau đó ghép nó với danh sách A ban đầu.
Giả sử phần tử cần thêm là x, cách thực hiện như sau:
A = [x] + A


Vận dụng

Cho dãy số A. Viết chương trình tính 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.

Ta có thể giả sử phần tử đầu tiên là lớn nhất, sau đó duyệt qua các phần tử còn lại. Nếu gặp phần tử nào lớn hơn giá trị lớn nhất hiện tại, ta cập nhật lại giá trị lớn nhất và chỉ số của nó.

Chương trình tìm phần tử lớn nhất:

# Giả sử A là danh sách cho trước
A = [1, 0, 10, 9, -1, 14, 7, 8]

# Giả sử phần tử đầu tiên là lớn nhất
max_value = A[0]
max_index = 0

# Duyệt từ phần tử thứ hai trở đi
for i in range(1, len(A)):
    if A[i] > max_value:
        max_value = A[i]
        max_index = i

print("Phần tử lớn nhất là", max_value, "tại vị trí (chỉ số)", max_index)
# Kết quả: Phần tử lớn nhất là 14 tại vị trí (chỉ số) 5

Tương tự cho bài toán tìm phần tử nhỏ nhất, ta chỉ cần thay đổi logic so sánh từ > thành <:

# Giả sử A là danh sách cho trước
A = [1, 0, 10, 9, -1, 14, 7, 8]

min_value = A[0]
min_index = 0

for i in range(1, len(A)):
    if A[i] < min_value:
        min_value = A[i]
        min_index = i

print("Phần tử nhỏ nhất là", min_value, "tại vị trí (chỉ số)", min_index)
# Kết quả: Phần tử nhỏ nhất là -1 tại vị trí (chỉ số) 4

Câu hỏi trắc nghiệm Tin học 10 - Bài 22 Kiểu dữ liệu danh sách

Thời gian làm bài: 30 phút
Đáp án chỉ hiển thị sau khi hoàn thành bài làm
Câu hỏi sẽ được hiển thị ngẫu nhiên
Vui lòng nhập họ và tên để bắt đầu làm bài

NB

Trong ngôn ngữ lập trình Python, cú pháp nào sau đây dùng để tạo một danh sách (list) rỗng?

NB

Cho danh sách A = [10, "Python", 20.5, True]. Để lấy độ dài (số lượng phần tử) của danh sách A, ta sử dụng lệnh nào sau đây?

TH

Cho danh sách hoc_sinh = ["An", "Bình", "Cường", "Dũng"]. Lệnh print(hoc_sinh[2]) sẽ in ra kết quả nào?

TH

Cho danh sách A = [1, 2, 3, 4, 5]. Sau khi thực hiện lệnh del A[1], danh sách A sẽ có giá trị là gì?

TH

Phương thức nào sau đây được sử dụng để thêm một phần tử vào cuối một danh sách?

TH

Cho hai danh sách A = [1, 2] và B = [3, 4]. Kết quả của lệnh C = A + B là gì?

VD

Cho đoạn mã sau:
A = [1, 5, 2, 8, 3]
S = 0
for i in range(len(A)):
  if A[i] % 2 == 0:
    S = S + A[i]
print(S)

Kết quả in ra màn hình là gì?

VD

Cho danh sách A = [10, 20, 30]. Lệnh nào sau đây sẽ gây ra lỗi?

VD

Mục đích của đoạn chương trình sau là gì?
A = [15, 7, 22, 19]
max_val = A[0]
for i in range(1, len(A)):
  if A[i] > max_val:
    max_val = A[i]
print(max_val)

VD

Cho danh sách A = [2, 4]. Sau khi thực hiện lần lượt hai lệnh: A.append(6)A = [0] + A, danh sách A cuối cùng là:

TH

Để truy cập phần tử cuối cùng của một danh sách A có n phần tử, ta dùng chỉ số nào sau đây?

VD

Đoạn lệnh nào sau đây thực hiện đúng công việc "thay thế giá trị của phần tử thứ hai trong danh sách A bằng 100"?

Một giáo viên sử dụng Python để quản lý điểm thi của một nhóm học sinh. Điểm được lưu trong một danh sách:
diem_thi = [8, 5, 10, 7, 4, 9]
Dưới đây là các nhận xét về việc xử lý danh sách này, hãy xác định tính Đúng/Sai của mỗi nhận xét.

NB Lệnh len(diem_thi) sẽ trả về kết quả là 6.

TH Để truy cập điểm số 10, ta sử dụng lệnh diem_thi[3].

TH Sau khi thực hiện lệnh diem_thi.append(6), độ dài của danh sách sẽ tăng lên một đơn vị.

VD Lệnh del diem_thi[0] sẽ xóa điểm số 4 ra khỏi danh sách.

Cho đoạn chương trình Python sau:       A = [10, 20, 5, 40]
T = 0
for i in range(len(A)):
  T = T + A[i]
print(T)
Dưới đây là các phát biểu liên quan đến đoạn chương trình trên, hãy xác định tính Đúng/Sai của mỗi phát biểu.

NB Danh sách A có các phần tử đều là kiểu dữ liệu số nguyên.

TH Vòng lặp for sẽ lặp lại 4 lần với biến i lần lượt nhận các giá trị 0, 1, 2, 3.

VD Chương trình trên dùng để tính tổng các phần tử trong danh sách A và kết quả in ra là 75.

VD Nếu thay dòng T = T + A[i] bằng T = A[i], chương trình sẽ in ra giá trị cuối cùng là 10.

Bạn An đang tạo một danh sách các món đồ cần mua sắm: mua_sam = ["táo", "sữa"]. Sau đó, An thực hiện thêm một số thao tác với danh sách này.
Hãy xác định tính Đúng/Sai của các phát biểu sau.

NB Để thêm "bánh mì" vào cuối danh sách, An dùng lệnh mua_sam.append("bánh mì").

TH Sau khi thêm "bánh mì", lệnh print(mua_sam[1]) sẽ hiển thị "bánh mì".

TH Lệnh danh_sach_moi = mua_sam + ["nước ngọt"] sẽ không làm thay đổi danh sách mua_sam ban đầu.

VD Nếu An thực hiện del mua_sam[0] rồi mua_sam.append("chuối"), danh sách cuối cùng sẽ là ["sữa", "chuối"].

Một chương trình được viết để nhập vào một dãy số và in ra dãy số vừa nhập, cùng tổng của chúng.
A = []
T = 0
n = int(input("Nhập số phần tử: "))
for i in range(n):
  so = int(input("Nhập số: "))
  A.append(so)
  T = T + so
print("Dãy số đã nhập:", A)
print("Tổng:", T)
Dưới đây là các nhận xét về chương trình, hãy xác định tính Đúng/Sai của mỗi nhận xét.

NB Dòng lệnh A = [] có tác dụng khởi tạo một danh sách rỗng để chuẩn bị lưu trữ các số.

TH Biến T được cập nhật tổng ngay sau khi mỗi số được thêm vào danh sách A.

VD Nếu người dùng nhập n=3, sau đó nhập lần lượt các số 5, 2, 8, chương trình sẽ in ra Tổng: 15.

VD Nếu bỏ dòng lệnh T = T + so ra khỏi chương trình, chương trình vẫn chạy nhưng sẽ báo lỗi khi thực hiện lệnh print("Tổng:", T).

Bảng xếp hạng

Chưa có kết quả nào.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *