Bỏ qua

Image

KIỂU DANH SÁCH - LIST TRONG PYTHON

I. Định nghĩa và đặc điểm

1. List là gì?

List (danh sách) là một cấu trúc dữ liệu có thể lưu trữ nhiều giá trị trong một biến. List được đặt trong dấu ngoặc vuông [].

# Các cách tạo list
danh_sach_mon = ["Toán", "Lý", "Hóa", "Sinh"]
diem_cac_mon = [8.5, 7.8, 9.2, 8.0]
danh_sach_hop = [1, "Python", 3.14, True]

2. Đặc điểm của List

  • Có thể thay đổi (mutable): Thêm, sửa, xóa phần tử
  • Có thể truy cập theo chỉ số
  • Có thể chứa các kiểu dữ liệu khác nhau
  • Có thứ tự các phần tử

II. Cách khai báo và sử dụng

1. Khai báo list

# List rỗng
danh_sach_rong = []

# List với các phần tử
danh_sach_so = [1, 2, 3, 4, 5]
danh_sach_chuoi = ["An", "Bình", "Cường"]
danh_sach_hop = [1, "Python", 3.14, True]

# List lồng nhau
danh_sach_lop = [["An", 15], ["Bình", 16], ["Cường", 15]]

2. Truy cập phần tử

danh_sach = ["Toán", "Lý", "Hóa", "Sinh", "Anh"]
print("Danh sách:", danh_sach)
print("Phần tử đầu:", danh_sach[0])      # Toán
print("Phần tử cuối:", danh_sach[-1])     # Anh
print("Phần tử thứ 2:", danh_sach[1])    # Lý

3. Cắt list (Slicing)

danh_sach = ["Toán", "Lý", "Hóa", "Sinh", "Anh"]
print("Danh sách gốc:", danh_sach)
print("2 phần tử đầu:", danh_sach[:2])     # ['Toán', 'Lý']
print("3 phần tử cuối:", danh_sach[-3:])   # ['Hóa', 'Sinh', 'Anh']
print("Phần tử 1-3:", danh_sach[1:4])     # ['Lý', 'Hóa', 'Sinh']

III. Các thao tác cơ bản

1. Thêm phần tử

danh_sach = ["Toán", "Lý", "Hóa"]

# Thêm vào cuối
danh_sach.append("Sinh")
print("Sau append:", danh_sach)

# Thêm vào vị trí cụ thể
danh_sach.insert(1, "Văn")
print("Sau insert:", danh_sach)

# Thêm nhiều phần tử
danh_sach.extend(["Anh", "Tin"])
print("Sau extend:", danh_sach)

2. Xóa phần tử

danh_sach = ["Toán", "Lý", "Hóa", "Sinh", "Anh"]

# Xóa theo giá trị
danh_sach.remove("Lý")
print("Sau remove:", danh_sach)

# Xóa theo chỉ số
phan_tu_bi_xoa = danh_sach.pop(1)
print("Phần tử bị xóa:", phan_tu_bi_xoa)
print("Sau pop:", danh_sach)

# Xóa phần tử cuối
phan_tu_cuoi = danh_sach.pop()
print("Phần tử cuối:", phan_tu_cuoi)
print("Sau pop cuối:", danh_sach)

3. Sửa phần tử

danh_sach = ["Toán", "Lý", "Hóa", "Sinh"]
print("Trước khi sửa:", danh_sach)

# Sửa phần tử theo chỉ số
danh_sach[1] = "Văn"
print("Sau khi sửa:", danh_sach)

# Sửa nhiều phần tử
danh_sach[0:2] = ["Toán học", "Văn học"]
print("Sau sửa nhiều:", danh_sach)

4. Tìm kiếm và đếm

danh_sach = ["Toán", "Lý", "Hóa", "Toán", "Sinh"]

# Kiểm tra phần tử có trong list không
print("'Toán' có trong list:", "Toán" in danh_sach)  # True
print("'Văn' có trong list:", "Văn" in danh_sach)    # False

# Đếm số lần xuất hiện
print("Số lần 'Toán' xuất hiện:", danh_sach.count("Toán"))  # 2

# Tìm vị trí đầu tiên
vi_tri = danh_sach.index("Toán")
print("Vị trí đầu tiên của 'Toán':", vi_tri)  # 0

IV. Duyệt list

1. Duyệt bằng for

danh_sach = ["Toán", "Lý", "Hóa", "Sinh"]

# Duyệt trực tiếp
print("Các môn học:")
for mon in danh_sach:
    print(f"- {mon}")

# Duyệt với chỉ số
print("\nDanh sách có chỉ số:")
for i, mon in enumerate(danh_sach):
    print(f"{i+1}. {mon}")

2. Duyệt với range

danh_sach = ["Toán", "Lý", "Hóa", "Sinh"]

# Duyệt theo chỉ số
for i in range(len(danh_sach)):
    print(f"Môn {i+1}: {danh_sach[i]}")

# Duyệt ngược
print("\nDuyệt ngược:")
for i in range(len(danh_sach)-1, -1, -1):
    print(f"{i+1}. {danh_sach[i]}")

V. Các phương thức hữu ích

1. Sắp xếp

# Sắp xếp số
diem = [8.5, 7.2, 9.1, 6.8, 8.9]
diem.sort()  # Sắp xếp tăng dần
print("Sắp xếp tăng dần:", diem)

diem.sort(reverse=True)  # Sắp xếp giảm dần
print("Sắp xếp giảm dần:", diem)

# Sắp xếp chuỗi
ten = ["An", "Bình", "Cường", "Duy"]
ten.sort()
print("Tên theo thứ tự:", ten)

2. Đảo ngược

danh_sach = [1, 2, 3, 4, 5]
print("Danh sách gốc:", danh_sach)

danh_sach.reverse()
print("Sau reverse:", danh_sach)

# Hoặc sử dụng slicing
danh_sach_dao = danh_sach[::-1]
print("Sử dụng slicing:", danh_sach_dao)

3. Sao chép list

# Sao chép nông (shallow copy)
list_goc = [1, 2, 3]
list_sao = list_goc.copy()
# hoặc
list_sao = list_goc[:]

print("List gốc:", list_goc)
print("List sao:", list_sao)

VI. Ví dụ minh họa

Ví dụ 1: Quản lý danh sách học sinh

# Tạo danh sách học sinh
danh_sach_hoc_sinh = []

# Thêm học sinh
danh_sach_hoc_sinh.append("Nguyễn Văn An")
danh_sach_hoc_sinh.append("Trần Thị Bình")
danh_sach_hoc_sinh.append("Lê Văn Cường")

# In danh sách
print("Danh sách học sinh:")
for i, ten in enumerate(danh_sach_hoc_sinh, 1):
    print(f"{i}. {ten}")

# Tìm học sinh
ten_tim = "Trần Thị Bình"
if ten_tim in danh_sach_hoc_sinh:
    vi_tri = danh_sach_hoc_sinh.index(ten_tim)
    print(f"\nTìm thấy {ten_tim} ở vị trí {vi_tri + 1}")
else:
    print(f"\nKhông tìm thấy {ten_tim}")

Ví dụ 2: Quản lý điểm số

# Danh sách điểm các môn
diem_cac_mon = [8.5, 7.8, 9.2, 8.0, 7.5]
ten_cac_mon = ["Toán", "Lý", "Hóa", "Sinh", "Anh"]

# In điểm từng môn
print("Điểm các môn học:")
for i in range(len(ten_cac_mon)):
    print(f"{ten_cac_mon[i]}: {diem_cac_mon[i]}")

# Tính điểm trung bình
diem_trung_binh = sum(diem_cac_mon) / len(diem_cac_mon)
print(f"\nĐiểm trung bình: {diem_trung_binh:.2f}")

# Tìm điểm cao nhất và thấp nhất
diem_cao_nhat = max(diem_cac_mon)
diem_thap_nhat = min(diem_cac_mon)
print(f"Điểm cao nhất: {diem_cao_nhat}")
print(f"Điểm thấp nhất: {diem_thap_nhat}")

# Tìm môn có điểm cao nhất
vi_tri_cao_nhat = diem_cac_mon.index(diem_cao_nhat)
mon_cao_nhat = ten_cac_mon[vi_tri_cao_nhat]
print(f"Môn có điểm cao nhất: {mon_cao_nhat}")

Ví dụ 3: Xử lý danh sách số

# Tạo danh sách số
so_nguyen = [5, 2, 8, 1, 9, 3, 7, 4, 6]

print("Danh sách gốc:", so_nguyen)

# Sắp xếp tăng dần
so_nguyen.sort()
print("Sắp xếp tăng dần:", so_nguyen)

# Tìm số chẵn và lẻ
so_chan = [x for x in so_nguyen if x % 2 == 0]
so_le = [x for x in so_nguyen if x % 2 != 0]

print("Số chẵn:", so_chan)
print("Số lẻ:", so_le)

# Tính tổng và trung bình
tong = sum(so_nguyen)
trung_binh = tong / len(so_nguyen)
print(f"Tổng: {tong}")
print(f"Trung bình: {trung_binh:.2f}")

VII. Bài tập thực hành tại lớp

Bài 1: Tạo danh sách môn học yêu thích

Đề bài: Tạo danh sách 5 môn học yêu thích và in ra màn hình.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo list chứa 5 tên môn học
  2. Sử dụng enumerate() để có số thứ tự
  3. In danh sách có định dạng đẹp

Input/Output mẫu:

Input Output
["Toán", "Tin học", "Anh", "Văn", "Sinh"] 1. Toán
2. Tin học
3. Anh
4. Văn
5. Sinh
💡 Gợi ý code
# Tạo danh sách môn học yêu thích
mon_yeu_thich = ["Toán", "Tin học", "Anh", "Văn", "Sinh"]

# In danh sách có số thứ tự
print("Các môn học yêu thích:")
for i, mon in enumerate(mon_yeu_thich, 1):
    print(f"{i}. {mon}")

Bài 2: Tính điểm trung bình từ list

Đề bài: Tạo danh sách điểm 4 môn học và tính điểm trung bình.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo list chứa điểm 4 môn học (float)
  2. Sử dụng sum() để tính tổng điểm
  3. Chia cho len() để có điểm trung bình
  4. Làm tròn kết quả 2 chữ số thập phân

Input/Output mẫu:

Input Tính toán Output
[8.5, 7.8, 9.2, 8.0] sum = 33.5 Điểm TB: 8.38
len = 4
33.5/4 = 8.375
💡 Gợi ý code
# Tạo danh sách điểm
diem = [8.5, 7.8, 9.2, 8.0]

# Tính điểm trung bình
trung_binh = sum(diem) / len(diem)

# In kết quả
print(f"Điểm trung bình: {trung_binh:.2f}")

Bài 3: Tìm kiếm trong danh sách

Đề bài: Tạo danh sách tên học sinh và tìm kiếm tên.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo list chứa tên các học sinh
  2. Nhập tên cần tìm từ bàn phím
  3. Sử dụng toán tử in để kiểm tra
  4. In thông báo tìm thấy hoặc không tìm thấy

Input/Output mẫu:

Danh sách Tìm kiếm Kết quả
["An", "Bình", "Cường", "Duy"] "Bình" Tìm thấy Bình
["An", "Bình", "Cường", "Duy"] "Mai" Không tìm thấy Mai
💡 Gợi ý code
# Tạo danh sách học sinh
ten_hoc_sinh = ["An", "Bình", "Cường", "Duy"]

# Nhập tên cần tìm
ten_tim = input("Nhập tên cần tìm: ")

# Tìm kiếm và thông báo
if ten_tim in ten_hoc_sinh:
    print(f"Tìm thấy {ten_tim}")
else:
    print(f"Không tìm thấy {ten_tim}")

VIII. Bài tập về nhà

Bài 1: Quản lý danh sách bạn bè

Đề bài: Viết chương trình quản lý danh sách bạn bè (thêm, xóa, tìm kiếm).

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo list trống để lưu tên bạn bè
  2. Tạo menu với các lựa chọn: thêm, xóa, tìm kiếm, hiển thị
  3. Sử dụng vòng lặp while để duy trì menu
  4. Dùng append() để thêm, remove() để xóa
  5. Sử dụng toán tử in để tìm kiếm

Input/Output mẫu:

Thao tác Input Kết quả
Thêm "An" Đã thêm An
Xóa "An" Đã xóa An
Tìm "Bình" Tìm thấy/Không tìm thấy

Bài 2: Quản lý điểm số học sinh

Đề bài: Viết chương trình quản lý điểm số học sinh với các thao tác: thêm điểm, tính trung bình, tìm điểm cao nhất.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo list trống để lưu điểm số
  2. Chức năng thêm điểm: nhập và append vào list
  3. Tính trung bình: sum()/len()
  4. Tìm điểm cao nhất: max()
  5. Hiển thị tất cả điểm với định dạng đẹp

Input/Output mẫu:

Điểm Trung bình Cao nhất
[8.5, 7.2, 9.1, 6.8] 7.9 9.1

Bài 3: Thao tác với danh sách số nguyên

Đề bài: Viết chương trình tạo danh sách số nguyên và thực hiện các thao tác: sắp xếp, tìm số chẵn/lẻ, tính tổng.

💡 Phân tích đề

Các bước thực hiện:

  1. Nhập n số nguyên từ bàn phím vào list
  2. Sắp xếp: sử dụng sort() hoặc sorted()
  3. Tìm số chẵn: lọc với điều kiện n % 2 == 0
  4. Tìm số lẻ: lọc với điều kiện n % 2 != 0
  5. Tính tổng: sử dụng sum()

Input/Output mẫu:

Danh sách gốc Sắp xếp Chẵn Lẻ Tổng
[5,2,8,1,9] [1,2,5,8,9] [2,8] [5,1,9] 25

Bài 4: To-do list

Đề bài: Viết chương trình quản lý danh sách công việc (to-do list) với các chức năng: thêm, xóa, đánh dấu hoàn thành.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo 2 list: công việc chưa làm và đã hoàn thành
  2. Menu: thêm công việc, xóa, hoàn thành, hiển thị
  3. Chuyển công việc giữa 2 list khi hoàn thành
  4. Hiển thị danh sách có định dạng rõ ràng
  5. Đếm số công việc còn lại và đã hoàn thành

Input/Output mẫu:

Công việc Trạng thái Danh sách
"Học bài" Chưa làm Todo: [Học bài]
"Học bài" Hoàn thành Done: [Học bài]

IX. Ghi chú quan trọng

1. Đặc điểm của List

  • List có thể thay đổi (mutable)
  • Có thể chứa các kiểu dữ liệu khác nhau
  • Có thứ tự các phần tử
  • Chỉ số bắt đầu từ 0

2. Các phương thức quan trọng

  • append(): Thêm vào cuối
  • insert(): Thêm vào vị trí cụ thể
  • remove(): Xóa theo giá trị
  • pop(): Xóa theo chỉ số
  • sort(): Sắp xếp
  • reverse(): Đảo ngược

3. Lưu ý khi sử dụng

  • Chỉ số âm đếm từ cuối list
  • Slicing: list[start:end:step]
  • List comprehension để tạo list mới
  • len() để lấy độ dài list