Skip to content

🔁 6.3 Lặp với list, string

📖 Giới thiệu

Vòng lặp for không chỉ dùng với range(), mà còn có thể duyệt trực tiếp qua list và string. Đây là cách rất tự nhiên và Pythonic để xử lý dữ liệu.

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

  • Duyệt list mà không cần chỉ số
  • Xử lý từng ký tự trong string
  • Kết hợp vòng lặp với list và string

🔧 Cú pháp

1. 📋 Lặp với list:

python
# Duyệt trực tiếp
fruits = ["táo", "cam", "chuối"]
for fruit in fruits:
    print(f"Tôi thích {fruit}")

# Duyệt với chỉ số (nếu cần)
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

2. 🔤 Lặp với string:

python
# Duyệt từng ký tự
name = "Python"
for char in name:
    print(f"Ký tự: {char}")

# Duyệt với chỉ số
for i in range(len(name)):
    print(f"Vị trí {i}: {name[i]}")

3. 🎯 Kết hợp enumerate():

python
# Có cả phần tử và chỉ số
fruits = ["táo", "cam", "chuối"]
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

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

1. 🔍 So sánh các cách duyệt list

python
# Danh sách mẫu
mon_hoc = ["Toán", "Văn", "Anh", "Lý", "Hóa"]

# Cách 1: Duyệt trực tiếp (Pythonic)
print("Cách 1 - Duyệt trực tiếp:")
for mon in mon_hoc:
    print(f"Môn: {mon}")

# Cách 2: Duyệt với chỉ số
print("\nCách 2 - Duyệt với chỉ số:")
for i in range(len(mon_hoc)):
    print(f"Môn {i+1}: {mon_hoc[i]}")

# Cách 3: Duyệt với enumerate
print("\nCách 3 - Enumerate:")
for i, mon in enumerate(mon_hoc):
    print(f"Môn {i+1}: {mon}")

2. 🔤 Xử lý string với vòng for

python
# Đếm ký tự
text = "Hello Python"
so_chu_cai = 0
so_khoang_trang = 0

for char in text:
    if char.isalpha():  # Là chữ cái
        so_chu_cai += 1
    elif char == " ":   # Là khoảng trắng
        so_khoang_trang += 1

print(f"Chữ cái: {so_chu_cai}")
print(f"Khoảng trắng: {so_khoang_trang}")

# Tìm ký tự
tim_ky_tu = "o"
vi_tri = []

for i, char in enumerate(text):
    if char == tim_ky_tu:
        vi_tri.append(i)

print(f"Ký tự '{tim_ky_tu}' ở vị trí: {vi_tri}")

3. 🧮 Xử lý list số

python
# Danh sách điểm
diem_so = [8, 7, 9, 6, 8, 10, 7]

# Tính điểm trung bình
tong_diem = 0
for diem in diem_so:
    tong_diem += diem

diem_tb = tong_diem / len(diem_so)
print(f"Điểm trung bình: {diem_tb:.1f}")

# Đếm loại điểm
gioi = 0
kha = 0  
trung_binh = 0

for diem in diem_so:
    if diem >= 8:
        gioi += 1
    elif diem >= 6:
        kha += 1
    else:
        trung_binh += 1

print(f"Giỏi: {gioi}, Khá: {kha}, TB: {trung_binh}")

💻 Ví dụ minh họa

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

python
# Danh sách trái cây
trai_cay = ["táo", "chuối", "cam", "xoài"]

print("Các loại trái cây:")
for trai in trai_cay:
    print(f"- {trai}")

Ví dụ 2: Đếm ký tự trong tên

python
# Đếm ký tự trong tên
ten = "An"

print(f"Tên: {ten}")
print("Các ký tự:")
for chu in ten:
    print(f"+ {chu}")

# Kết quả thống kê
print(f"\n📊 THỐNG KÊ:")
print(f"Tổng ký tự: {len(cau)}")
print(f"Chữ cái: {so_chu_cai}")
print(f"Chữ số: {so_chu_so}")
print(f"Khoảng trắng: {so_khoang_trang}")
print(f"Ký tự đặc biệt: {so_dac_biet}")

# Đếm nguyên âm
nguyen_am = "aeiouAEIOU"
so_nguyen_am = 0

for char in cau:
    if char in nguyen_am:
        so_nguyen_am += 1

print(f"Nguyên âm: {so_nguyen_am}")

Ví dụ 3: Máy tính điểm lớp

python
# may_tinh_diem_lop.py
print("📚 MÁY TÍNH ĐIỂM LỚP")
print("=" * 25)

# Danh sách học sinh và điểm
hoc_sinh = ["An", "Bình", "Chi", "Dũng", "Emy"]
diem_toan = [8, 7, 9, 6, 8]
diem_van = [7, 8, 8, 7, 9]

print("📋 BẢNG ĐIỂM LỚP:")
print("-" * 30)
print(f"{'Tên':8} {'Toán':>6} {'Văn':>6} {'TB':>6}")
print("-" * 30)

# Tính và hiển thị điểm từng học sinh
tong_diem_lop = 0
so_hoc_sinh = len(hoc_sinh)

for i in range(so_hoc_sinh):
    ten = hoc_sinh[i]
    toan = diem_toan[i]
    van = diem_van[i]
### Ví dụ 3: Tính tổng các số

```python
# Tính tổng từ 1 đến 5
so_list = [1, 2, 3, 4, 5]
tong = 0

for so in so_list:
    tong = tong + so
    
print(f"Tổng = {tong}")

🏋️ Thực hành

Bài tập 1: In từng chữ cái

python
# In từng chữ cái trong tên
ten = "Minh"
for chu in ten:
    print(chu)

Bài tập 2: Đếm số lẻ

python
# Đếm số lẻ trong list
so_list = [1, 2, 3, 4, 5]
dem = 0

for so in so_list:
    if so % 2 == 1:  # Số lẻ
        dem = dem + 1
        
print(f"Có {dem} số lẻ")

Bài tập 3: Tìm từ khóa

python
# Tìm từ "Python" trong list
mon_hoc = ["Toán", "Python", "Văn"]

for mon in mon_hoc:
    if mon == "Python":
        print("Tìm thấy Python!")

📋 Tóm tắt

So sánh các cách duyệt:

CáchCú phápKhi nào dùng
Duyệt trực tiếpfor item in listChỉ cần giá trị
Duyệt với chỉ sốfor i in range(len(list))Cần vị trí
Enumeratefor i, item in enumerate(list)Cần cả hai

Duyệt string:

python
text = "Hello"

# Duyệt ký tự
for char in text:
    print(char)

# Duyệt với vị trí  
for i, char in enumerate(text):
    print(f"{i}: {char}")

Mẹo hữu ích:

python
# ✅ Kiểm tra phần tử có trong list
if "táo" in fruits:
    print("Có táo trong danh sách")

# ✅ Tìm vị trí phần tử
try:
    vi_tri = fruits.index("táo")
    print(f"Táo ở vị trí {vi_tri}")
except ValueError:
    print("Không tìm thấy táo")

# ✅ Đếm phần tử
so_tao = fruits.count("táo")
print(f"Có {so_tao} quả táo")

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

Bài tiếp theo sẽ học về 📝 Bài tập cơ bản - luyện tập với nhiều bài toán thực tế!


💡 Mẹo: Duyệt trực tiếp (for item in list) luôn dễ đọc hơn duyệt với chỉ số!

🔁 Thực hành: Thử duyệt các loại dữ liệu khác nhau để làm quen!

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