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:
- Tạo list chứa 5 tên môn học
- Sử dụng enumerate() để có số thứ tự
- 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:
- Tạo list chứa điểm 4 môn học (float)
- Sử dụng sum() để tính tổng điểm
- Chia cho len() để có điểm trung bình
- 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:
- Tạo list chứa tên các học sinh
- Nhập tên cần tìm từ bàn phím
- Sử dụng toán tử
in
để kiểm tra - 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:
- Tạo list trống để lưu tên bạn bè
- Tạo menu với các lựa chọn: thêm, xóa, tìm kiếm, hiển thị
- Sử dụng vòng lặp while để duy trì menu
- Dùng append() để thêm, remove() để xóa
- 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:
- Tạo list trống để lưu điểm số
- Chức năng thêm điểm: nhập và append vào list
- Tính trung bình: sum()/len()
- Tìm điểm cao nhất: max()
- 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:
- Nhập n số nguyên từ bàn phím vào list
- Sắp xếp: sử dụng sort() hoặc sorted()
- Tìm số chẵn: lọc với điều kiện n % 2 == 0
- Tìm số lẻ: lọc với điều kiện n % 2 != 0
- 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:
- Tạo 2 list: công việc chưa làm và đã hoàn thành
- Menu: thêm công việc, xóa, hoàn thành, hiển thị
- Chuyển công việc giữa 2 list khi hoàn thành
- Hiển thị danh sách có định dạng rõ ràng
- Đế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ốiinsert()
: Thêm vào vị trí cụ thểremove()
: Xóa theo giá trịpop()
: Xóa theo chỉ sốsort()
: Sắp xếpreverse()
: Đả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