📋 Bài Tập về Danh Sách (List) trong Python
Chào bạn! Đây là một tập hợp các bài tập về danh sách trong Python, từ cơ bản đến nâng cao. Hãy thử sức với những bài tập này để củng cố kiến thức của bạn về list trong Python nhé!
🔰 Bài Tập Mức Cơ Bản
Bài 1: Tạo và Truy Cập List
Yêu cầu: Tạo một list chứa tên của 5 loại trái cây yêu thích của bạn. In ra màn hình trái cây đầu tiên và trái cây cuối cùng trong danh sách.
Xem gợi ý
# Tạo list các loại trái cây
fruits = ["apple", "banana", "orange", "grape", "watermelon"]
# In ra trái cây đầu tiên và cuối cùng
print(f"Trái cây đầu tiên: {fruits[0]}")
print(f"Trái cây cuối cùng: {fruits[-1]}")
Bài 2: Thêm và Xóa Phần Tử
Yêu cầu: Tiếp tục với list trái cây ở trên, hãy thêm "mango" vào cuối danh sách và xóa "banana" khỏi danh sách. In danh sách sau khi thay đổi.
Xem gợi ý
fruits = ["apple", "banana", "orange", "grape", "watermelon"]
# Thêm mango vào cuối danh sách
fruits.append("mango")
# Xóa banana khỏi danh sách
fruits.remove("banana")
# In danh sách sau thay đổi
print(f"Danh sách sau thay đổi: {fruits}")
Bài 3: Đảo Ngược List
Yêu cầu: Tạo một list chứa các số từ 1 đến 10. Đảo ngược list này mà không dùng phương thức reverse()
. In kết quả.
Xem gợi ý
# Tạo list các số từ 1 đến 10
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Đảo ngược list (không dùng reverse())
reversed_numbers = numbers[::-1]
# In kết quả
print(f"List ban đầu: {numbers}")
print(f"List đảo ngược: {reversed_numbers}")
🔄 Bài Tập Mức Trung Bình
Bài 4: Đếm Tần Suất Phần Tử
Yêu cầu: Cho một list colors = ["red", "green", "blue", "red", "green", "yellow", "blue", "red"]
. Hãy đếm số lần xuất hiện của mỗi màu và hiển thị kết quả.
Xem gợi ý
colors = ["red", "green", "blue", "red", "green", "yellow", "blue", "red"]
# Phương ph áp 1: Dùng dictionary để đếm
color_count = {}
for color in colors:
if color in color_count:
color_count[color] += 1
else:
color_count[color] = 1
# Hiển thị kết quả
print("Số lần xuất hiện của mỗi màu:")
for color, count in color_count.items():
print(f"{color}: {count}")
# Phương pháp 2: Dùng count()
print("\nPhương pháp khác:")
unique_colors = set(colors)
for color in unique_colors:
print(f"{color}: {colors.count(color)}")
Bài 5: Tách Số Chẵn và Lẻ
Yêu cầu: Cho một list các số numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
. Hãy tách thành hai list khác nhau, một chứa các số chẵn và một chứa các số lẻ.
Xem gợi ý
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Tách thành hai list
even_numbers = []
odd_numbers = []
for num in numbers:
if num % 2 == 0:
even_numbers.append(num)
else:
odd_numbers.append(num)
# Hiển thị kết quả
print(f"Các số chẵn: {even_numbers}")
print(f"Các số lẻ: {odd_numbers}")
# Phương pháp khác: Dùng list comprehension
even = [num for num in numbers if num % 2 == 0]
odd = [num for num in numbers if num % 2 != 0]
print(f"List comprehension - Số chẵn: {even}")
print(f"List comprehension - Số lẻ: {odd}")
Bài 6: List Con Lớn Nhất
Yêu cầu: Cho một list numbers = [2, -3, 5, 7, -1, -4, 8, 10]
. Tìm list con liên tiếp có tổng lớn nhất và in ra tổng đó.
Xem gợi ý
numbers = [2, -3, 5, 7, -1, -4, 8, 10]
# Thuật toán Kadane để tìm subarray có tổng lớn nhất
max_so_far = numbers[0]
max_ending_here = numbers[0]
for i in range(1, len(numbers)):
# Hoặc bắt đầu lại từ phần tử hiện tại hoặc thêm vào tổng hiện có
max_ending_here = max(numbers[i], max_ending_here + numbers[i])
# Cập nhật max_so_far nếu cần
max_so_far = max(max_so_far, max_ending_here)
print(f"Tổng lớn nhất của list con liên tiếp: {max_so_far}")
🚀 Bài Tập Mức Nâng Cao
Bài 7: Ma Trận Chuyển Vị
Yêu cầu: Cho ma trận 2 chiều matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
. Tạo ma trận chuyển vị (transpose) của nó.
Xem gợi ý
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# In ma trận ban đầu
print("Ma trận ban đầu:")
for row in matrix:
print(row)
# Tạo ma trận chuyển vị
transpose = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
# In ma trận chuyển vị
print("\nMa trận chuyển vị:")
for row in transpose:
print(row)
# Phương pháp khác
transpose_alt = list(zip(*matrix))
print("\nMa trận chuyển vị (phương pháp zip):")
for row in transpose_alt:
print(row)