Bài 4.2. Một số bài tập Python cơ bản về list

Bài 4.2. Một số bài tập Python cơ bản về list
Chào mừng các bạn quay trở lại với series học Python cơ bản! Trong bài học trước, chúng ta đã tìm hiểu về khái niệm và các đặc tính cơ bản của list (danh sách) trong Python - một trong những kiểu dữ liệu cực kỳ quan trọng và được sử dụng thường xuyên nhất.
Để thực sự nắm vững cách sử dụng list, không gì hiệu quả hơn là bắt tay vào thực hành với các bài tập cụ thể. Bài viết này sẽ tổng hợp một số bài tập cơ bản, giúp bạn củng cố kiến thức và làm quen với các thao tác xử lý list phổ biến. Hãy cùng bắt đầu nhé!
Ôn lại một chút về List
Trước khi đi vào bài tập, hãy cùng nhắc lại nhanh một vài đặc điểm chính của list:
- Là một tập hợp có thứ tự (ordered): Các phần tử trong list được lưu trữ theo một thứ tự nhất định và thứ tự này không thay đổi trừ khi bạn chủ động sửa đổi.
- Có thể thay đổi (mutable): Bạn có thể thêm, xóa, hoặc sửa đổi các phần tử trong list sau khi đã tạo nó.
- Cho phép các phần tử trùng lặp: Một list có thể chứa nhiều phần tử có cùng giá trị.
- Có thể chứa các kiểu dữ liệu khác nhau: Một list có thể chứa số nguyên, số thực, chuỗi, boolean, thậm chí cả các list khác.
Để tạo một list, chúng ta sử dụng cặp dấu ngoặc vuông []
và các phần tử được phân tách bởi dấu phẩy ,
.
# Ví dụ tạo list
empty_list = [] # List rỗng
numbers = [1, 5, 2, 8, 3] # List chứa các số nguyên
mixed_list = [1, "hello", True, 3.14] # List chứa nhiều kiểu dữ liệu
Bây giờ, chúng ta đã sẵn sàng để thực hành!
Các bài tập cơ bản về List
Bài tập 1: Tạo và In List
Yêu cầu: Tạo một list chứa tên của 5 loại trái cây bạn yêu thích và in list đó ra màn hình.
# Giải bài tập 1
# Tạo list chứa tên các loại trái cây
favorite_fruits = ["Táo", "Xoài", "Chuối", "Dâu tây", "Cam"]
# In list ra màn hình
print("Danh sách trái cây yêu thích của tôi:")
print(favorite_fruits)
Giải thích:
- Dòng
favorite_fruits = ["Táo", "Xoài", "Chuối", "Dâu tây", "Cam"]
tạo ra một biến tên làfavorite_fruits
và gán cho nó một list chứa 5 chuỗi ký tự (tên các loại trái cây). - Hàm
print()
được sử dụng để hiển thị nội dung của list ra console.
Kết quả mong đợi:
Danh sách trái cây yêu thích của tôi:
['Táo', 'Xoài', 'Chuối', 'Dâu tây', 'Cam']
Bài tập 2: Truy cập phần tử trong List
Yêu cầu: Từ list favorite_fruits
đã tạo ở Bài tập 1:
- In ra loại trái cây đầu tiên trong danh sách.
- In ra loại trái cây cuối cùng trong danh sách.
- In ra loại trái cây thứ ba trong danh sách.
# Giải bài tập 2
favorite_fruits = ["Táo", "Xoài", "Chuối", "Dâu tây", "Cam"]
# 1. In ra phần tử đầu tiên (index 0)
print("Trái cây đầu tiên:", favorite_fruits[0])
# 2. In ra phần tử cuối cùng (index -1 hoặc len(list)-1)
print("Trái cây cuối cùng:", favorite_fruits[-1])
# Cách khác: print("Trái cây cuối cùng:", favorite_fruits[len(favorite_fruits) - 1])
# 3. In ra phần tử thứ ba (index 2)
print("Trái cây thứ ba:", favorite_fruits[2])
Giải thích:
- Python sử dụng chỉ số (index) để truy cập các phần tử trong list. Chỉ số bắt đầu từ 0 cho phần tử đầu tiên.
favorite_fruits[0]
truy cập phần tử có chỉ số 0 (là "Táo").- Chỉ số âm được dùng để truy cập từ cuối list lên.
favorite_fruits[-1]
truy cập phần tử cuối cùng (là "Cam"). favorite_fruits[2]
truy cập phần tử có chỉ số 2 (phần tử thứ ba, là "Chuối").- Hàm
len(list)
trả về số lượng phần tử trong list.len(favorite_fruits)
là 5, nênfavorite_fruits[len(favorite_fruits) - 1]
tương đươngfavorite_fruits[4]
, cũng là phần tử cuối cùng.
Kết quả mong đợi:
Trái cây đầu tiên: Táo
Trái cây cuối cùng: Cam
Trái cây thứ ba: Chuối
Bài tập 3: Thay đổi phần tử trong List
Yêu cầu: Bạn quyết định thay đổi loại trái cây thứ hai trong list favorite_fruits
thành "Nho". Hãy cập nhật list và in ra list sau khi thay đổi.
# Giải bài tập 3
favorite_fruits = ["Táo", "Xoài", "Chuối", "Dâu tây", "Cam"]
print("List ban đầu:", favorite_fruits)
# Thay đổi phần tử thứ hai (index 1) thành "Nho"
favorite_fruits[1] = "Nho"
# In list sau khi thay đổi
print("List sau khi thay đổi:", favorite_fruits)
Giải thích:
- Để thay đổi giá trị của một phần tử, chúng ta truy cập nó bằng chỉ số và sử dụng phép gán
=
. favorite_fruits[1] = "Nho"
tìm đến phần tử có chỉ số 1 (hiện tại là "Xoài") và gán giá trị mới là "Nho" cho nó. Đây là minh chứng cho tính mutable (có thể thay đổi) của list.
Kết quả mong đợi:
List ban đầu: ['Táo', 'Xoài', 'Chuối', 'Dâu tây', 'Cam']
List sau khi thay đổi: ['Táo', 'Nho', 'Chuối', 'Dâu tây', 'Cam']
Bài tập 4: Thêm phần tử vào List
Yêu cầu:
- Thêm "Sầu riêng" vào cuối list
favorite_fruits
. - Thêm "Măng cụt" vào vị trí thứ hai (sau "Táo") trong list.
- In ra list cuối cùng.
# Giải bài tập 4
favorite_fruits = ["Táo", "Nho", "Chuối", "Dâu tây", "Cam"] # Sử dụng list từ bài 3
print("List trước khi thêm:", favorite_fruits)
# 1. Thêm "Sầu riêng" vào cuối list bằng phương thức append()
favorite_fruits.append("Sầu riêng")
print("List sau khi append:", favorite_fruits)
# 2. Thêm "Măng cụt" vào vị trí thứ hai (index 1) bằng phương thức insert()
favorite_fruits.insert(1, "Măng cụt")
print("List sau khi insert:", favorite_fruits)
# 3. In ra list cuối cùng (chính là list sau khi insert)
print("List cuối cùng:", favorite_fruits)
Giải thích:
- Phương thức
.append(item)
dùng để thêm một phần tửitem
vào cuối cùng của list. - Phương thức
.insert(index, item)
dùng để chèn một phần tửitem
vào vị trí có chỉ sốindex
được chỉ định. Các phần tử từ vị tríindex
trở đi sẽ được đẩy về sau một vị trí.favorite_fruits.insert(1, "Măng cụt")
chèn "Măng cụt" vào vị trí index 1, đẩy "Nho" và các phần tử sau nó sang phải.
Kết quả mong đợi:
List trước khi thêm: ['Táo', 'Nho', 'Chuối', 'Dâu tây', 'Cam']
List sau khi append: ['Táo', 'Nho', 'Chuối', 'Dâu tây', 'Cam', 'Sầu riêng']
List sau khi insert: ['Táo', 'Măng cụt', 'Nho', 'Chuối', 'Dâu tây', 'Cam', 'Sầu riêng']
List cuối cùng: ['Táo', 'Măng cụt', 'Nho', 'Chuối', 'Dâu tây', 'Cam', 'Sầu riêng']
Bài tập 5: Xóa phần tử khỏi List
Yêu cầu: Sử dụng list favorite_fruits
từ cuối Bài tập 4:
- Xóa "Chuối" ra khỏi list bằng giá trị của nó.
- Xóa phần tử ở vị trí thứ 4 (index 3) ra khỏi list và cho biết phần tử đó là gì.
- Xóa phần tử đầu tiên ra khỏi list bằng chỉ số.
- In ra list cuối cùng sau các thao tác xóa.
# Giải bài tập 5
favorite_fruits = ['Táo', 'Măng cụt', 'Nho', 'Chuối', 'Dâu tây', 'Cam', 'Sầu riêng'] # List từ bài 4
print("List ban đầu:", favorite_fruits)
# 1. Xóa "Chuối" bằng phương thức remove()
favorite_fruits.remove("Chuối")
print("List sau khi remove 'Chuối':", favorite_fruits)
# 2. Xóa phần tử ở index 3 bằng phương thức pop()
removed_fruit = favorite_fruits.pop(3) # Index 3 bây giờ là 'Dâu tây'
print(f"Đã xóa phần tử '{removed_fruit}' bằng pop(3).")
print("List sau khi pop(3):", favorite_fruits)
# 3. Xóa phần tử đầu tiên (index 0) bằng từ khóa del
del favorite_fruits[0] # Xóa 'Táo'
print("List sau khi del phần tử đầu tiên:", favorite_fruits)
# 4. In list cuối cùng
print("List cuối cùng sau khi xóa:", favorite_fruits)
Giải thích:
- Phương thức
.remove(value)
tìm và xóa phần tử đầu tiên trong list có giá trị làvalue
. Nếu giá trị không tồn tại, nó sẽ báo lỗiValueError
. - Phương thức
.pop(index)
xóa phần tử tại vị tríindex
được chỉ định và trả về giá trị của phần tử đó. Nếu không cung cấpindex
,.pop()
sẽ xóa và trả về phần tử cuối cùng của list. - Từ khóa
del list_name[index]
xóa phần tử tại vị tríindex
đã cho. Nó không trả về giá trị của phần tử bị xóa.del
cũng có thể dùng để xóa cả một list hoặc một lát cắt (slice) của list.
Kết quả mong đợi:
List ban đầu: ['Táo', 'Măng cụt', 'Nho', 'Chuối', 'Dâu tây', 'Cam', 'Sầu riêng']
List sau khi remove 'Chuối': ['Táo', 'Măng cụt', 'Nho', 'Dâu tây', 'Cam', 'Sầu riêng']
Đã xóa phần tử 'Dâu tây' bằng pop(3).
List sau khi pop(3): ['Táo', 'Măng cụt', 'Nho', 'Cam', 'Sầu riêng']
List sau khi del phần tử đầu tiên: ['Măng cụt', 'Nho', 'Cam', 'Sầu riêng']
List cuối cùng sau khi xóa: ['Măng cụt', 'Nho', 'Cam', 'Sầu riêng']
Bài tập 6: Sắp xếp List
Yêu cầu:
- Tạo một list các số nguyên:
numbers = [5, 1, 8, 3, 10, 2]
. - Sắp xếp list
numbers
theo thứ tự tăng dần và in ra list đã sắp xếp. - Sắp xếp list
numbers
theo thứ tự giảm dần và in ra list đã sắp xếp. - Tạo một bản sao đã sắp xếp của list
favorite_fruits
(từ cuối Bài tập 5) mà không làm thay đổi list gốc, sau đó in cả list gốc và list đã sắp xếp.
# Giải bài tập 6
# 1. Tạo list số nguyên
numbers = [5, 1, 8, 3, 10, 2]
print("List số ban đầu:", numbers)
# 2. Sắp xếp tăng dần bằng phương thức sort() (thay đổi list gốc)
numbers.sort()
print("List số sau khi sort() tăng dần:", numbers)
# 3. Sắp xếp giảm dần bằng phương thức sort(reverse=True)
numbers.sort(reverse=True)
print("List số sau khi sort() giảm dần:", numbers)
# 4. Sắp xếp list trái cây mà không thay đổi list gốc
favorite_fruits = ['Măng cụt', 'Nho', 'Cam', 'Sầu riêng'] # List từ bài 5
print("\nList trái cây gốc:", favorite_fruits)
# Sử dụng hàm sorted() để tạo bản sao đã sắp xếp
sorted_fruits = sorted(favorite_fruits)
print("Bản sao đã sắp xếp của list trái cây:", sorted_fruits)
print("List trái cây gốc (không đổi):", favorite_fruits)
# Sắp xếp giảm dần với sorted()
sorted_fruits_desc = sorted(favorite_fruits, reverse=True)
print("Bản sao sắp xếp giảm dần:", sorted_fruits_desc)
Giải thích:
- Phương thức
.sort()
sắp xếp các phần tử của list ngay tại chỗ (in-place), nghĩa là nó thay đổi trực tiếp list gốc. Mặc định là sắp xếp tăng dần. Tham sốreverse=True
sẽ sắp xếp giảm dần. - Hàm
sorted(iterable)
trả về một list mới chứa các phần tử từiterable
(ví dụ: một list khác) đã được sắp xếp. List gốc không bị thay đổi. Hàmsorted()
cũng chấp nhận tham sốreverse=True
.
Kết quả mong đợi:
List số ban đầu: [5, 1, 8, 3, 10, 2]
List số sau khi sort() tăng dần: [1, 2, 3, 5, 8, 10]
List số sau khi sort() giảm dần: [10, 8, 5, 3, 2, 1]
List trái cây gốc: ['Măng cụt', 'Nho', 'Cam', 'Sầu riêng']
Bản sao đã sắp xếp của list trái cây: ['Cam', 'Măng cụt', 'Nho', 'Sầu riêng']
List trái cây gốc (không đổi): ['Măng cụt', 'Nho', 'Cam', 'Sầu riêng']
Bản sao sắp xếp giảm dần: ['Sầu riêng', 'Nho', 'Măng cụt', 'Cam']
Bài tập 7: Tìm kiếm và Đếm trong List
Yêu cầu:
- Tạo một list:
grades = [8, 7, 9, 10, 7, 6, 8, 7]
- Kiểm tra xem điểm
10
có trong listgrades
không. - Tìm vị trí (chỉ số) đầu tiên của điểm
8
trong list. - Đếm số lần xuất hiện của điểm
7
trong list.
# Giải bài tập 7
# 1. Tạo list điểm
grades = [8, 7, 9, 10, 7, 6, 8, 7]
print("List điểm:", grades)
# 2. Kiểm tra sự tồn tại của điểm 10 bằng toán tử 'in'
has_ten = 10 in grades
print(f"Điểm 10 có trong list không? {has_ten}")
# 3. Tìm chỉ số đầu tiên của điểm 8 bằng phương thức index()
index_of_eight = grades.index(8)
print(f"Chỉ số đầu tiên của điểm 8 là: {index_of_eight}")
# 4. Đếm số lần xuất hiện của điểm 7 bằng phương thức count()
count_of_seven = grades.count(7)
print(f"Số lần xuất hiện của điểm 7 là: {count_of_seven}")
Giải thích:
- Toán tử
in
trả vềTrue
nếu một phần tử tồn tại trong list vàFalse
nếu không. - Phương thức
.index(value)
trả về chỉ số của lần xuất hiện đầu tiên củavalue
trong list. Nếuvalue
không có trong list, nó sẽ gây ra lỗiValueError
. - Phương thức
.count(value)
trả về số lần màvalue
xuất hiện trong list.
Kết quả mong đợi:
List điểm: [8, 7, 9, 10, 7, 6, 8, 7]
Điểm 10 có trong list không? True
Chỉ số đầu tiên của điểm 8 là: 0
Số lần xuất hiện của điểm 7 là: 3
Qua các bài tập trên, hy vọng bạn đã có cái nhìn rõ ràng hơn và tự tin hơn khi làm việc với list trong Python. List là một cấu trúc dữ liệu cực kỳ linh hoạt và mạnh mẽ, việc thành thạo các thao tác cơ bản này là nền tảng vững chắc để bạn tiếp tục khám phá những khía cạnh phức tạp hơn của Python.
Hãy thử tự mình thay đổi các giá trị, thêm bớt các thao tác để xem kết quả thay đổi như thế nào nhé! Chúc bạn học tốt!
Comments