Skip to content

🎯 10.1 Khái niệm list 2 chiều

📖 Giới thiệu

List 2 chiều là list chứa các list con bên trong, tạo thành cấu trúc giống như bảng hay ma trận. Đây là cách tổ chức dữ liệu rất hữu ích để lưu trữ thông tin có dạng hàng và cột.

INFO

List 2 chiều trong Python thực chất là list chứa các list khác, tạo thành cấu trúc dữ liệu dạng ma trận

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

  • Hiểu khái niệm list 2 chiều
  • Biết cách tạo và truy cập list 2 chiều
  • Ứng dụng vào bài toán thực tế

🔧 Cú pháp

Tạo list 2 chiều:

python
# Cách 1: Tạo thủ công
list_2d = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# Cách 2: Tạo rỗng
hang = 3
cot = 3
list_2d = []
for i in range(hang):
    list_2d.append([0] * cot)

Truy cập phần tử:

python
# Truy cập: list[hàng][cột]
gia_tri = list_2d[0][1]  # Hàng 0, cột 1
list_2d[1][2] = 10       # Gán giá trị

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

1. 📋 List 2 chiều là gì?

List 2 chiều giống như bảng có hàng và cột:

python
# Ma trận 3x3
ma_tran = [
    [1, 2, 3],    # Hàng 0
    [4, 5, 6],    # Hàng 1  
    [7, 8, 9]     # Hàng 2
]
#  ↑  ↑  ↑
# Cột0 1  2

2. 🎯 Truy cập phần tử

python
bang = [
    ["An", 8, 7],      # Học sinh 0
    ["Bình", 9, 6],    # Học sinh 1
    ["Chi", 7, 8]      # Học sinh 2
]

# Truy cập tên học sinh đầu tiên
ten = bang[0][0]  # "An"

# Truy cập điểm toán của Bình
diem_toan_binh = bang[1][1]  # 9

# Thay đổi điểm văn của Chi
bang[2][2] = 9

3. 🔄 Duyệt qua list 2 chiều

python
so = [
    [1, 2, 3],
    [4, 5, 6]
]

# Duyệt từng hàng
for hang in so:
    print(hang)

# Duyệt từng phần tử
for i in range(len(so)):           # Duyệt hàng
    for j in range(len(so[i])):    # Duyệt cột
        print(so[i][j], end=" ")
    print()  # Xuống hàng

💻 Ví dụ minh họa

Ví dụ 1: Bảng điểm lớp học

python
# Bảng điểm: [Tên, Toán, Văn]
bang_diem = [
    ["An", 8, 7],
    ["Bình", 9, 6],
    ["Chi", 7, 8],
    ["Dũng", 6, 9]
]

print("📊 BẢNG ĐIỂM LỚP")
print("=" * 30)

# Hiển thị bảng điểm
print(f"{'Tên':<8} {'Toán':<6} {'Văn':<6} {'TB':<6}")
print("-" * 30)

for hs in bang_diem:
    ten = hs[0]
    toan = hs[1]
    van = hs[2]
    tb = (toan + van) / 2
    
    print(f"{ten:<8} {toan:<6} {van:<6} {tb:<6.1f}")

print("-" * 30)

# Tính điểm trung bình môn
tong_toan = 0
tong_van = 0
so_hs = len(bang_diem)

for hs in bang_diem:
    tong_toan += hs[1]
    tong_van += hs[2]

tb_toan = tong_toan / so_hs
tb_van = tong_van / so_hs

print(f"TB Toán: {tb_toan:.1f}")
print(f"TB Văn: {tb_van:.1f}")

Ví dụ 2: Lịch làm việc trong tuần

python
# Lịch làm việc: [Thứ, Sáng, Chiều]
lich_lv = [
    ["Thứ 2", "Học Python", "Làm bài tập"],
    ["Thứ 3", "Học Toán", "Đọc sách"],
    ["Thứ 4", "Học Văn", "Viết bài"],
    ["Thứ 5", "Học Anh", "Nghe nhạc"],
    ["Thứ 6", "Ôn tập", "Xem phim"],
    ["Thứ 7", "Nghỉ", "Chơi game"],
    ["CN", "Nghỉ", "Đi chơi"]
]

print("📅 LỊCH LÀM VIỆC TUẦN")
print("=" * 40)

# Hiển thị lịch
print(f"{'Ngày':<8} {'Sáng':<15} {'Chiều':<15}")
print("-" * 40)

for ngay in lich_lv:
    thu = ngay[0]
    sang = ngay[1]
    chieu = ngay[2]
    print(f"{thu:<8} {sang:<15} {chieu:<15}")

print("-" * 40)

# Tìm ngày học Python
print("Tìm ngày học Python:")
for ngay in lich_lv:
    if "Python" in ngay[1] or "Python" in ngay[2]:
        print(f"- {ngay[0]}: {ngay[1]}")

Ví dụ 3: Game Tic-Tac-Toe đơn giản

python
# Bàn cờ 3x3
ban_co = [
    [" ", " ", " "],
    [" ", " ", " "],
    [" ", " ", " "]
]

def ve_ban_co():
    print("\n   0   1   2")
    for i in range(3):
        print(f"{i}  {ban_co[i][0]} | {ban_co[i][1]} | {ban_co[i][2]}")
        if i < 2:
            print("  ---|---|---")

print("🎮 TIC-TAC-TOE")
print("=" * 20)

ve_ban_co()

# Đánh thử vài nước
ban_co[1][1] = "X"  # Giữa
ban_co[0][0] = "O"  # Góc
ban_co[2][2] = "X"  # Góc đối

print("\nSau khi đánh:")
ve_ban_co()

# Kiểm tra hàng giữa
hang_giua = ban_co[1]
print(f"\nHàng giữa: {hang_giua}")

# Kiểm tra cột giữa
cot_giua = []
for i in range(3):
    cot_giua.append(ban_co[i][1])
print(f"Cột giữa: {cot_giua}")

🏋️ Thực hành

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

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

print("Ma trận:")
for hang in ma_tran:
    print(hang)

Bài tập 2: Truy cập phần tử

python
# Danh sách [tên, tuổi]
nguoi = [
    ["An", 20],
    ["Bình", 22],
    ["Chi", 19]
]

# In tên người đầu tiên
print(f"Tên: {nguoi[0][0]}")

# In tuổi người cuối
print(f"Tuổi: {nguoi[2][1]}")

Bài tập 3: Tính tổng ma trận

python
# Tính tổng tất cả số trong ma trận
so = [
    [1, 2],
    [3, 4],
    [5, 6]
]

tong = 0
for hang in so:
    for so_item in hang:
        tong += so_item

print(f"Tổng: {tong}")

📋 Tóm tắt

Cấu trúc list 2 chiều:

python
list_2d = [
    [a, b, c],    # Hàng 0
    [d, e, f],    # Hàng 1
    [g, h, i]     # Hàng 2
]
#  ↑  ↑  ↑
# Cột0 1  2

Truy cập phần tử:

Cú phápÝ nghĩaVí dụ
list[i]Hàng thứ ilist[0][a,b,c]
list[i][j]Hàng i, cột jlist[0][1]b
len(list)Số hànglen(list) → 3
len(list[i])Số cột hàng ilen(list[0]) → 3

Ứng dụng thực tế:

  1. Bảng điểm: Học sinh x Môn học
  2. Lịch: Ngày x Công việc
  3. Game: Bàn cờ, map
  4. Dữ liệu: Bảng thống kê

Lưu ý quan trọng:

  1. Index bắt đầu từ 0: list[0][0] là phần tử đầu tiên
  2. Kiểm tra giới hạn: Tránh lỗi index out of range
  3. Vòng lặp lồng: Dùng 2 vòng for để duyệt
  4. Cấu trúc rõ ràng: Viết code dễ đọc

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

Bài tiếp theo sẽ học về 🔄 Duyệt và xử lý list 2 chiều chi tiết hơn!


💡 Mẹo: Hình dung list 2 chiều như bảng Excel với hàng và cột!

🎯 Thực hành: Thử tạo bảng thời khóa biểu của bạn bằng list 2 chiều!

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