tinbc tinbc

Bài 6: List, tuple và set trong Python

Thợ Code5 phút đọc
Bài 6: List, tuple và set trong Python

Bài 5 bạn đã lặp qua dữ liệu bằng vòng lặp. Giờ ta học cách gom nhiều giá trị vào một biến — thứ bạn sẽ dùng ở gần như mọi chương trình. Python có ba kiểu hay gặp nhất: list, tuple, set. Cuối bài bạn tự viết một chương trình quản lý danh sách việc cần làm (thêm, xóa, xem) — chạy ra kết quả thật.

⏱️ Cách học bài này (~30 phút): đọc ba kiểu + code mẫu (10’), tự gõ và chạy các bài thực hành (12’), xem lỗi thường gặp (4’), tự kiểm + lưu code mang về (4’).

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

Sau bài này bạn sẽ:

  • Dùng list: tạo, thêm (.append), xóa (.remove), duyệt, kiểm tra (in).
  • Biết tuple là gì và vì sao “bất biến”.
  • Dùng set để khử trùng và kiểm tra tồn tại nhanh.
  • Tự viết chương trình quản lý việc cần làm — thêm vào kho code cá nhân.

Nội dung: ba cách gom giá trị

1. List — danh sách sửa được [ ]

List có thứ tự, thay đổi được — kiểu dùng nhiều nhất:

viec = ["Học Python", "Trả lời email"]
viec.append("Họp nhóm")     # thêm vào cuối
viec.remove("Trả lời email") # xóa theo giá trị
print(viec)                  # ['Học Python', 'Họp nhóm']
print(len(viec))             # 2 — đếm số phần tử
print("Học Python" in viec)  # True — kiểm tra tồn tại

Truy cập theo vị trí (bắt đầu từ 0): viec[0] là phần tử đầu. Duyệt bằng vòng lặp:

for v in viec:
    print("-", v)

2. Tuple — danh sách “khoá cứng” ( )

Tuple giống list nhưng không sửa được sau khi tạo — hợp cho dữ liệu cố định:

toa_do = (10, 20)     # ví dụ toạ độ x, y
print(toa_do[0])      # 10
# toa_do[0] = 5       # LỖI: tuple không cho đổi

Dùng tuple khi bạn muốn chắc chắn dữ liệu không bị đổi nhầm (ngày sinh, toạ độ, cấu hình cố định).

3. Set — tập không trùng { }

Set không giữ thứ tựtự loại phần tử trùng — cực tiện để khử trùng:

so = [1, 2, 2, 3, 3, 3]
print(set(so))        # {1, 2, 3} — bỏ trùng
print(len(set(so)))   # 3 — đếm giá trị khác nhau

Code mẫu có chú thích: quản lý việc cần làm

Ghép list + vòng lặp + điều kiện thành một chương trình nhỏ:

viec = []                                   # danh sách rỗng ban đầu

while True:
    lenh = input("Thêm (a), Xóa (x), Xem (v), Thoát (q): ")
    if lenh == "a":
        viec.append(input("Việc cần thêm: "))
    elif lenh == "x":
        can_xoa = input("Việc cần xóa: ")
        if can_xoa in viec:                 # kiểm tra trước khi xóa
            viec.remove(can_xoa)
        else:
            print("Không tìm thấy việc đó.")
    elif lenh == "v":
        for i, v in enumerate(viec, 1):     # enumerate đánh số từ 1
            print(f"{i}. {v}")
    elif lenh == "q":
        break

Mấu chốt: .append() để thêm, .remove() để xóa (nhớ kiểm tra in trước kẻo lỗi), và enumerate để in kèm số thứ tự.

Bài thực hành code (tự gõ)

Bài 1 — Đếm phần tử: cho mon = ["Toán", "Lý", "Hóa"], in số môn bằng len().

Bài 2 — Khử trùng: cho diem_danh = ["Lan", "Nam", "Lan", "Hoa", "Nam"], in danh sách tên không trùng và số người khác nhau.
Gợi ý: dùng set().

Bài 3 — Kiểm tra & thêm: cho một list gio_hang, hỏi người dùng một món; nếu chưa có thì thêm vào, nếu đã có thì báo “Đã có trong giỏ”.
Gợi ý: dùng in.append().

Lỗi thường gặp & cách sửa

  • .remove(x) khi x không có trong listValueError. Luôn kiểm tra if x in list trước khi xóa.
  • Lẫn [], (), {} → sai kiểu. Nhớ: list [], tuple (), set {}.
  • Sửa tupleTypeError. Tuple bất biến; cần đổi thì dùng list.
  • Chỉ số vượt giới hạn (viec[5] khi list chỉ có 2 phần tử) → IndexError. Đếm bằng len() trước.
  • Đọc kỹ thông báo lỗi để sửa nhanh: xem cách đọc lỗi và debug cho người mới.

💾 Mang về — chương trình quản lý việc

Lưu vào kho code cá nhân (bài L6 trong series):

# todo.py — quản lý danh sách việc cần làm
viec = []
while True:
    lenh = input("Thêm (a), Xóa (x), Xem (v), Thoát (q): ")
    if lenh == "a":
        viec.append(input("Việc: "))
    elif lenh == "x":
        v = input("Xóa việc: ")
        viec.remove(v) if v in viec else print("Không có.")
    elif lenh == "v":
        for i, v in enumerate(viec, 1):
            print(f"{i}. {v}")
    elif lenh == "q":
        break

Thuật ngữ chốt

Thuật ngữ Giải thích ngắn
list [] Danh sách có thứ tự, sửa được
tuple () Dãy có thứ tự, không sửa được (bất biến)
set {} Tập không trùng, không thứ tự
.append() / .remove() Thêm vào cuối / xóa theo giá trị
in Kiểm tra một phần tử có trong tập không
enumerate() Duyệt kèm số thứ tự

Tự kiểm tra & lời giải

  1. [], (), {} lần lượt là kiểu gì? (Đáp án: list, tuple, set)
  2. set([1,1,2]) cho kết quả gì? (Đáp án: {1, 2})
  3. Vì sao nên kiểm tra in trước khi .remove()? (Đáp án: tránh ValueError khi phần tử không tồn tại)

Lời giải Bài thực hành:

# Bài 1
mon = ["Toán", "Lý", "Hóa"]
print(len(mon))            # 3

# Bài 2
diem_danh = ["Lan", "Nam", "Lan", "Hoa", "Nam"]
khong_trung = set(diem_danh)
print(khong_trung, len(khong_trung))   # 3 tên khác nhau (thứ tự set không cố định)

# Bài 3
gio_hang = ["táo", "sữa"]
mon = input("Thêm món: ")
if mon in gio_hang:
    print("Đã có trong giỏ")
else:
    gio_hang.append(mon)
    print(gio_hang)

Ghi nhớ nhanh

  • list [] sửa được (append/remove/in); tuple () bất biến; set {} khử trùng.
  • Xóa an toàn: kiểm tra in trước rồi mới .remove().
  • Khử trùng nhanh một list: set(danh_sach).

👉 Bài tập về nhà: nâng cấp chương trình todo để không cho thêm việc trùng (gợi ý: kiểm tra in trước khi .append()). Bài tiếp theo trong series: Bài 7 — Dictionary (sắp đăng).

Chia sẻ:
0.0 0 lượt đánh giá

Câu hỏi thường gặp

List, tuple và set khác nhau thế nào?

List là danh sách có thứ tự, sửa được (thêm/xóa/đổi), viết trong dấu ngoặc vuông []. Tuple cũng có thứ tự nhưng KHÔNG sửa được sau khi tạo, viết trong ngoặc tròn (). Set là tập hợp KHÔNG trùng lặp và KHÔNG có thứ tự, viết trong ngoặc nhọn {}. Dùng list khi cần một danh sách thay đổi được, tuple cho dữ liệu cố định, set khi cần loại bỏ trùng.

Làm sao thêm và xóa phần tử trong list?

Thêm vào cuối bằng .append(x); chèn tại vị trí bằng .insert(i, x); xóa theo giá trị bằng .remove(x); xóa theo vị trí bằng .pop(i). Kiểm tra một phần tử có trong list không bằng toán tử in, ví dụ ‘nếu “Học” in danh_sach’. Đây là các thao tác bạn sẽ dùng liên tục.

Khi nào nên dùng set?

Dùng set khi bạn cần một tập các giá trị không trùng lặp, hoặc muốn loại bỏ phần tử trùng nhanh chóng. Ví dụ set([1,2,2,3]) cho {1,2,3}. Set cũng kiểm tra ‘có tồn tại hay không’ rất nhanh. Nhược điểm: set không giữ thứ tự và không cho phần tử trùng, nên không dùng khi thứ tự quan trọng.

Thợ Code

Thợ Code

Thợ code chính hiệu, thích dắt người mới qua mấy đoạn 'khó nhằn' bằng giọng nhẹ tênh. Châm ngôn: cứ làm dự án thật, sai thì sửa, vui là chính.

Bài liên quan

Bài 4: HTML — liên kết, ảnh, danh sách và bảng
Lập trình

Bài 4: HTML — liên kết, ảnh, danh sách và bảng

Bài 4 series Web cơ bản (bài học 30 phút): thêm liên kết, ảnh, danh sách và bảng vào trang cá nhân — bốn thẻ HTML dùng nhiều nhất, qua bài thực hành gõ code và file mang về.

Bài 5: Vòng lặp for và while trong Python
Lập trình

Bài 5: Vòng lặp for và while trong Python

Bài 5 series Python cho người mới (bài học 30 phút): lặp công việc với for và while, dùng range() và break/continue, qua một chương trình tính tổng và trung bình điểm tự viết — kèm bài tập và code mang về.

1 lượt xem