List trong Python: Tạo, thêm, xóa phần tử
List là kiểu dữ liệu bạn sẽ dùng nhiều nhất khi lập trình Python — lưu danh sách sản phẩm, điểm số học sinh, kết quả truy vấn từ database đều cần đến nó. Bài này hướng dẫn từ cách tạo list đến các thao tác thêm, xóa, tìm kiếm và list comprehension.
List trong Python là gì?
List là kiểu dữ liệu có thứ tự, có thể thay đổi (mutable) và cho phép giá trị trùng lặp. Một list có thể chứa bất kỳ kiểu dữ liệu nào, kể cả trộn lẫn nhau.
# List trái cây
fruits = ["táo", "chuối", "xoài", "cam"]
# List số nguyên
numbers = [1, 2, 3, 4, 5]
# List hỗn hợp — hoàn toàn hợp lệ trong Python
mixed = [1, "hello", True, 3.14, None]
# List rỗng
empty = []
print(type(fruits)) # <class 'list'>
print(len(fruits)) # 4
Truy cập phần tử
Python dùng index để truy cập từng phần tử. Index bắt đầu từ 0, và có thể dùng index âm để đếm từ cuối:
fruits = ["táo", "chuối", "xoài", "cam"]
print(fruits[0]) # "táo" — phần tử đầu
print(fruits[3]) # "cam" — phần tử cuối (index 3)
print(fruits[-1]) # "cam" — phần tử cuối (cách viết khác)
print(fruits[-2]) # "xoài" — kế cuối
Slicing — cắt lấy một đoạn
Cú pháp list[start:stop:step] cho phép lấy nhiều phần tử cùng lúc:
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[2:5]) # [2, 3, 4] — từ index 2 đến 4
print(nums[:3]) # [0, 1, 2] — 3 phần tử đầu
print(nums[7:]) # [7, 8, 9] — từ index 7 đến cuối
print(nums[::2]) # [0, 2, 4, 6, 8] — bước nhảy 2
print(nums[::-1]) # [9, 8, 7, ...] — đảo ngược toàn bộ
Thêm phần tử vào list
Ba cách thêm phần tử, mỗi cách có mục đích khác nhau:
# append() — thêm vào cuối, nhanh nhất
fruits = ["táo", "chuối"]
fruits.append("xoài")
print(fruits) # ["táo", "chuối", "xoài"]
# insert() — thêm vào vị trí cụ thể
fruits.insert(1, "nho") # thêm "nho" vào index 1
print(fruits) # ["táo", "nho", "chuối", "xoài"]
# extend() — thêm nhiều phần tử từ một iterable khác
more = ["cam", "dứa"]
fruits.extend(more)
print(fruits) # ["táo", "nho", "chuối", "xoài", "cam", "dứa"]
Xóa phần tử khỏi list
Có bốn cách xóa — chọn cách nào tùy theo bạn biết giá trị hay vị trí:
# remove() — xóa theo giá trị (lần xuất hiện đầu tiên)
fruits = ["táo", "chuối", "xoài", "chuối"]
fruits.remove("chuối")
print(fruits) # ["táo", "xoài", "chuối"]
# pop() — xóa theo index, trả về phần tử vừa xóa
fruits = ["táo", "chuối", "xoài"]
last = fruits.pop() # xóa cuối → "xoài"
first = fruits.pop(0) # xóa index 0 → "táo"
# del — xóa theo index, không trả về gì
fruits = ["táo", "chuối", "xoài"]
del fruits[1]
print(fruits) # ["táo", "xoài"]
# clear() — xóa toàn bộ
fruits.clear()
print(fruits) # []
Các phương thức thường dùng
# sort() — sắp xếp tại chỗ (thay đổi list gốc)
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort() # tăng dần
numbers.sort(reverse=True) # giảm dần
# sorted() — trả về list mới, list gốc không đổi
original = [3, 1, 4, 1, 5]
sorted_list = sorted(original)
# reverse() — đảo ngược thứ tự
fruits = ["táo", "chuối", "xoài"]
fruits.reverse()
print(fruits) # ["xoài", "chuối", "táo"]
# index() — tìm vị trí của phần tử
print(fruits.index("chuối")) # 1
# count() — đếm số lần xuất hiện
numbers = [1, 2, 3, 2, 1, 2]
print(numbers.count(2)) # 3
List Comprehension — viết ngắn hơn, đọc tự nhiên hơn
Thay vì vòng lặp for nhiều dòng, list comprehension giúp tạo list mới trong một dòng:
# Bình phương các số từ 1 đến 5
squares = [i ** 2 for i in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
# Lọc chỉ lấy số chẵn rồi bình phương
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(even_squares) # [4, 16, 36, 64, 100]
# Viết hoa tên trái cây
fruits = ["táo", "chuối", "xoài"]
upper_fruits = [f.upper() for f in fruits]
print(upper_fruits) # ["TÁO", "CHUỐI", "XOÀI"]
Bảng tổng hợp phương thức List
| Phương thức | Mô tả | Ví dụ |
|---|---|---|
| append(x) | Thêm x vào cuối | lst.append(4) |
| insert(i, x) | Thêm x vào index i | lst.insert(1, 4) |
| extend(lst2) | Thêm tất cả phần tử từ lst2 | lst.extend([5,6]) |
| remove(x) | Xóa lần xuất hiện đầu tiên của x | lst.remove(4) |
| pop(i) | Xóa và trả về phần tử tại index i | lst.pop(0) |
| clear() | Xóa toàn bộ phần tử | lst.clear() |
| index(x) | Trả về index đầu tiên của x | lst.index(4) |
| count(x) | Đếm số lần x xuất hiện | lst.count(4) |
| sort() | Sắp xếp tại chỗ | lst.sort() |
| reverse() | Đảo ngược tại chỗ | lst.reverse() |
| copy() | Tạo bản sao nông (shallow copy) | lst2 = lst.copy() |