Skip to content

🧾 8.1 Khai báo list

📖 Giới thiệu

List (danh sách) là một trong những cấu trúc dữ liệu quan trọng nhất trong Python. Nó cho phép bạn lưu trữ nhiều giá trị trong một biến, giống như một cái hộp có thể chứa nhiều món đồ khác nhau.

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

  • Hiểu khái niệm list và tại sao cần sử dụng
  • Biết cách khai báo và tạo list
  • Thành thạo truy cập phần tử trong list
  • Hiểu về indexing và slicing

🔧 Cú pháp

Cú pháp khai báo list:

python
# Khai báo list rỗng
ten_list = []

# Khai báo list có sẵn phần tử
ten_list = [phan_tu_1, phan_tu_2, phan_tu_3, ...]

# Truy cập phần tử
gia_tri = ten_list[chi_so]

Các cách khai báo:

python
# 1. List rỗng
danh_sach_rong = []

# 2. List số nguyên
so_nguyen = [1, 2, 3, 4, 5]

# 3. List chuỗi
ten_hoc_sinh = ["Minh", "Lan", "Hùng", "Mai"]

# 4. List hỗn hợp
thong_tin = ["Python", 30, True, 9.5]

# 5. List lồng nhau
matrix = [[1, 2], [3, 4], [5, 6]]

🔬 Phân tích & Giải thích chi tiết

1. 🎯 List là gì và tại sao cần?

Vấn đề khi không có list:

python
# Lưu điểm của 5 học sinh - cách cũ (không hiệu quả)
diem_hoc_sinh_1 = 8.5
diem_hoc_sinh_2 = 7.0
diem_hoc_sinh_3 = 9.0
diem_hoc_sinh_4 = 6.5
diem_hoc_sinh_5 = 8.0

# Tính trung bình - rất rườm rà
trung_binh = (diem_hoc_sinh_1 + diem_hoc_sinh_2 + diem_hoc_sinh_3 + 
              diem_hoc_sinh_4 + diem_hoc_sinh_5) / 5

Giải pháp với list:

python
# Lưu điểm của 5 học sinh - cách mới (hiệu quả)
diem_hoc_sinh = [8.5, 7.0, 9.0, 6.5, 8.0]

# Tính trung bình - đơn giản
trung_binh = sum(diem_hoc_sinh) / len(diem_hoc_sinh)

2. 📊 Đặc điểm của list

Có thứ tự (Ordered):

python
mon_hoc = ["Toán", "Lý", "Hóa"]
# "Toán" ở vị trí 0, "Lý" ở vị trí 1, "Hóa" ở vị trí 2

Có thể thay đổi (Mutable):

python
diem = [8, 7, 9]
diem[1] = 8    # Thay đổi điểm từ 7 thành 8
print(diem)    # [8, 8, 9]

Cho phép trùng lặp:

python
so_luong = [1, 2, 2, 3, 2, 1]  # Có thể có giá trị trùng

Có thể chứa nhiều kiểu dữ liệu:

python
thong_tin_hoc_sinh = ["Minh", 20, True, 8.5, "CNTT"]

3. 🔢 Indexing - Truy cập phần tử

Index dương (từ trái sang phải):

python
fruits = ["táo", "cam", "chuối", "xoài", "dưa"]
#         0      1      2        3       4

print(fruits[0])    # "táo"
print(fruits[1])    # "cam"
print(fruits[4])    # "dưa"

Index âm (từ phải sang trái):

python
fruits = ["táo", "cam", "chuối", "xoài", "dưa"]
#         -5     -4     -3       -2      -1

print(fruits[-1])   # "dưa" (phần tử cuối)
print(fruits[-2])   # "xoài" (phần tử áp cuối)
print(fruits[-5])   # "táo" (phần tử đầu)

4. ✂️ Slicing - Cắt list

Cú pháp slicing:

python
list[start:end:step]
# start: vị trí bắt đầu (bao gồm)
# end: vị trí kết thúc (không bao gồm)  
# step: bước nhảy (mặc định 1)

Ví dụ slicing:

python
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(numbers[2:5])      # [2, 3, 4]
print(numbers[:3])       # [0, 1, 2] (từ đầu đến index 3)
print(numbers[7:])       # [7, 8, 9] (từ index 7 đến cuối)
print(numbers[:])        # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] (toàn bộ)
print(numbers[::2])      # [0, 2, 4, 6, 8] (bước nhảy 2)
print(numbers[::-1])     # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (đảo ngược)

5. 📏 Các hàm cơ bản với list

python
mon_hoc = ["Toán", "Lý", "Hóa", "Sinh", "Văn"]

# Độ dài list
print(len(mon_hoc))        # 5

# Kiểm tra phần tử có tồn tại
print("Toán" in mon_hoc)   # True
print("Anh" in mon_hoc)    # False

# Đếm số lần xuất hiện
diem = [8, 7, 8, 9, 8, 6]
print(diem.count(8))       # 3

# Tìm vị trí phần tử đầu tiên
print(diem.index(9))       # 3

💻 Ví dụ minh họa

Ví dụ 1: Danh sách trái cây

python
# Danh sách trái cây đơn giản
trai_cay = ["táo", "chuối", "cam"]

print("Danh sách trái cây:")
print(trai_cay[0])  # táo
print(trai_cay[1])  # chuối  
print(trai_cay[2])  # cam

print(f"Tôi thích ăn {trai_cay[0]}")
elif diem >= 5.5:
    loai = "Trung bình"
    emoji = "📚"

Ví dụ 2: Danh sách số

python
# Danh sách điểm số đơn giản
diem = [8, 7, 9, 6]

print("Điểm số:")
print(f"Môn 1: {diem[0]}")
print(f"Môn 2: {diem[1]}")
print(f"Môn 3: {diem[2]}")
print(f"Môn 4: {diem[3]}")

print(f"Số môn học: {len(diem)}")

Ví dụ 3: Thay đổi giá trị trong list

python
# Thay đổi giá trị trong list
mau_sac = ["đỏ", "xanh", "vàng"]

print("Ban đầu:", mau_sac)

# Thay đổi phần tử thứ 2
mau_sac[1] = "tím"

print("Sau khi thay:", mau_sac)
alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print("List alphabet:", alphabet)
print("List numbers:", numbers)
print("-" * 40)

# Demo indexing
print("1. INDEXING (Truy cập phần tử):")
print(f"alphabet[0] = {alphabet[0]} (phần tử đầu)")
print(f"alphabet[-1] = {alphabet[-1]} (phần tử cuối)")
print(f"alphabet[4] = {alphabet[4]} (phần tử thứ 5)")
print(f"alphabet[-3] = {alphabet[-3]} (phần tử thứ 3 từ cuối)")

print()

# Demo slicing cơ bản
print("2. SLICING CỞ BẢN:")
print(f"alphabet[2:5] = {alphabet[2:5]} (từ index 2 đến 4)")
print(f"alphabet[:3] = {alphabet[:3]} (3 phần tử đầu)")
print(f"alphabet[7:] = {alphabet[7:]} (từ index 7 đến cuối)")
print(f"alphabet[:] = {alphabet[:]} (toàn bộ)")

print()

# Demo slicing nâng cao
print("3. SLICING NÂNG CAO:")
print(f"alphabet[::2] = {alphabet[::2]} (bước nhảy 2)")
print(f"alphabet[1::2] = {alphabet[1::2]} (chỉ số lẻ)")
print(f"alphabet[::-1] = {alphabet[::-1]} (đảo ngược)")
print(f"alphabet[8:2:-1] = {alphabet[8:2:-1]} (từ 8 về 2, bước -1)")

print()

# Demo với số
print("4. THỰC HÀNH VỚI SỐ:")
print(f"numbers[3:7] = {numbers[3:7]}")
print(f"sum(numbers[3:7]) = {sum(numbers[3:7])}")

# Lấy số chẵn và lẻ
so_chan = numbers[::2]    # 0, 2, 4, 6, 8
so_le = numbers[1::2]     # 1, 3, 5, 7, 9
print(f"Số chẵn: {so_chan}")
print(f"Số lẻ: {so_le}")

## 🏋️ Thực hành

### Bài tập 1: Tạo list đơn giản

```python
# Tạo list và in các phần tử
mau_sac = ["đỏ", "xanh", "vàng"]
print(mau_sac[0])
print(mau_sac[1])
print(mau_sac[2])

Bài tập 2: Làm việc với số

python
# List số và thao tác cơ bản
so = [1, 2, 3, 4, 5]
print(f"Số đầu: {so[0]}")
print(f"Số cuối: {so[4]}")
print(f"Tổng: {len(so)} số")

Bài tập 3: Thay đổi list

python
# Thay đổi giá trị trong list
ten = ["An", "Bình", "Chi"]
print("Trước:", ten)
ten[1] = "Dũng"
print("Sau:", ten)

Bài tập 4: Thử thách - Matrix đơn giản

Tạo "ma trận" bằng list lồng nhau:

python
# TODO: Tạo ma trận 3x3 chứa số 1-9
# TODO: In ma trận theo dạng bảng
# TODO: Tính tổng từng hàng
# TODO: Tính tổng từng cột

Đáp án:

python
# Tạo ma trận 3x3
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# In ma trận
print("Ma trận:")
for hang in matrix:
    print(hang)

# Tổng từng hàng
print("\nTổng từng hàng:")
for i, hang in enumerate(matrix):
    print(f"Hàng {i+1}: {sum(hang)}")

# Tổng từng cột
print("\nTổng từng cột:")
for j in range(len(matrix[0])):
    tong_cot = 0
    for i in range(len(matrix)):
        tong_cot += matrix[i][j]
    print(f"Cột {j+1}: {tong_cot}")

📋 Tóm tắt

Những điều quan trọng về list:

  1. 🎯 Khái niệm: List là cấu trúc dữ liệu lưu trữ nhiều giá trị có thứ tự

  2. 📝 Khai báo:

    python
    # List rỗng
    my_list = []
    
    # List có sẵn dữ liệu
    my_list = [1, 2, 3, "hello", True]
  3. 🔢 Indexing:

    python
    my_list[0]    # Phần tử đầu
    my_list[-1]   # Phần tử cuối
    my_list[i]    # Phần tử thứ i
  4. ✂️ Slicing:

    python
    my_list[start:end:step]
    my_list[:3]      # 3 phần tử đầu
    my_list[2:]      # Từ index 2 đến cuối
    my_list[::-1]    # Đảo ngược
  5. 🔍 Hàm hữu ích:

    python
    len(my_list)           # Độ dài
    my_list.count(value)   # Đếm
    my_list.index(value)   # Tìm vị trí
    value in my_list       # Kiểm tra tồn tại
  6. 🎪 Patterns thường dùng:

    python
    # Duyệt list
    for item in my_list:
        print(item)
    
    # Duyệt với index
    for i in range(len(my_list)):
        print(i, my_list[i])
    
    # Tạo list con theo điều kiện
    new_list = []
    for item in my_list:
        if condition:
            new_list.append(item)

Chuẩn bị cho bài tiếp theo:

Bài tiếp theo sẽ học về 🛠️ Các thao tác cơ bản với list - cách thêm, xóa, sửa phần tử và các thao tác nâng cao!


💡 Mẹo: List là cấu trúc dữ liệu được sử dụng nhiều nhất trong Python. Hãy thực hành thường xuyên để thành thạo!

🎯 Thực hành: Hãy tạo nhiều list khác nhau và thử nghiệm indexing, slicing để làm quen!

🐍 Khóa học Python căn bản bằng tiếng Việt