Học bằng cách đọc theo thứ tự

Cách sử dụng list trong Python

Học cách dùng kiểu list trong Python: khai báo, truy cập theo chỉ số, slicing và các phương thức thông dụng để thao tác với danh sách.

Tạo một list

Với danh sách (list), bạn có thể gom nhiều giá trị lại cùng một chỗ. Khác với int hay str — nơi một biến chỉ giữ một giá trị — list có thể xếp bao nhiêu giá trị tùy ý cạnh nhau.

Bạn khai báo bằng cách đặt các giá trị trong [], phân tách bằng dấu phẩy.

Nội dung của list và các index
102030400123

Giống như với chuỗi, bạn truy cập các phần tử bằng index bắt đầu từ 0. [0] cho bạn phần tử đầu tiên, và [-1] cho phần tử cuối cùng.

Một đặc điểm quan trọng của list là bạn có thể thay đổi giá trị của nó về sau.

# Khai báo một list
numbers = [10, 20, 30, 40]

# List rỗng (sẽ được thêm vào sau)
empty = []

# Truy cập
print(numbers[0])     # 10
print(numbers[-1])    # 40

# Ghi đè
numbers[1] = 99
print(numbers)        # [10, 99, 30, 40]

# Trộn các kiểu khác nhau cũng được
mixed = [1, "apple", 3.14, True]
print(mixed[1])       # apple

List lồng nhau (list bên trong list)

Bạn cũng có thể đặt list bên trong list, ví dụ [[1, 2], [3, 4]]. Để lấy một giá trị ra, bạn nối hai index như data[1][0]. Cách này tiện khi xử lý dữ liệu dạng bảng, nhưng khi mới bắt đầu thì một list phẳng là đủ.

Hãy thao tác với một danh sách mua trái cây.

① Tạo fruits = ["apple", "banana", "grape", "lemon"], rồi dùng print() để in phần tử đầu tiêncuối cùng.

② Thay fruits[1] bằng "orange" rồi print() toàn bộ list.

Python Editor

Chạy code để xem đầu ra

Slice (cắt lát)

List dùng cùng cú pháp slice như chuỗi. [start:end] cho bạn một list con, [::step] duyệt theo bước, và [-n:] lấy n phần tử cuối.

Kết quả của slice là một list.

Slice hoạt động thế nào
[1,2,3,4,5][:3][1, 2, 3]3 phần tử đầu[1,2,3,4,5][-2:][4, 5]2 phần tử cuốislicelấy raslicelấy ra

[:3] lấy 3 phần tử đầu (nửa mở, không gồm điểm cuối), và [-2:] lấy 2 phần tử cuối.

Hoạt động y hệt như slice của chuỗi.

nums = [1, 2, 3, 4, 5]

print(nums[:3])    # [1, 2, 3]
print(nums[2:])    # [3, 4, 5]
print(nums[-2:])   # [4, 5]
print(nums[::2])   # [1, 3, 5] (cách một phần tử)

# List gốc không đổi (một list mới được trả về)
print(nums)        # [1, 2, 3, 4, 5]

Bạn có scores = [72, 85, 91, 68, 77, 95].

① Dùng slice để lấy 3 phần tử đầu ([72, 85, 91]) rồi in ra.

② Dùng slice để lấy 2 phần tử cuối ([77, 95]) rồi in ra.

Python Editor

Chạy code để xem đầu ra

Thêm và xóa phần tử

List có rất nhiều phương thức để thêm hoặc xóa phần tử. Các phương thức này thay đổi trực tiếp chính list đó. Nói cách khác, khi gọi list.append(...), list sẽ bị sửa tại chỗ.

Phương thứcTác dụng
append(x)Thêm một phần tử vào cuối
extend(iterable)Nối toàn bộ phần tử của một list khác vào cuối
insert(i, x)Chèn x vào vị trí i
remove(x)Quét từ trái sang và xóa phần tử đầu tiên khớp x
pop(i)Xóa phần tử ở vị trí i và trả về nó (mặc định là phần tử cuối)
clear()Xóa hết, làm list rỗng
append và extend
[1, 2, 3].append([4, 5])[1,2,3,[4,5]]lồng nhau[1, 2, 3].extend([4, 5])[1,2,3,4,5]phẳnggọikết quảgọikết quả

append thêm "một phần tử".

extend "tháo rời và thêm" từng phần tử.

Dù truyền cùng [4, 5], kết quả vẫn khác nhau.

box = [1, 2, 3]

# Thêm
box.append("apple")       # thêm một phần tử vào cuối
print(box)                # [1, 2, 3, 'apple']

box.extend(["banana", "grape"])  # tháo rời và nối vào cuối
print(box)                # [1, 2, 3, 'apple', 'banana', 'grape']

box.insert(1, "NEW")      # chèn vào index 1
print(box)                # [1, 'NEW', 2, 3, 'apple', 'banana', 'grape']

# Xóa
box.remove("apple")       # xóa phần tử đầu tiên khớp giá trị
print(box)                # [1, 'NEW', 2, 3, 'banana', 'grape']

v = box.pop(0)            # lấy index 0 ra và trả về
print(v)                  # 1
print(box)                # ['NEW', 2, 3, 'banana', 'grape']

remove / pop khi không có → lỗi

remove(x) sẽ ném ValueError nếu x không có trong list, còn pop(i) sẽ ném IndexError nếu i nằm ngoài khoảng. Một mẫu an toàn là kiểm tra sự tồn tại trước bằng if x in box: trước khi xóa.

Hãy chỉnh sửa một To-Do list.

Bạn bắt đầu với todo = ["mua sắm", "gym"].

① Dùng append để thêm "đọc sách" vào cuối.

② Dùng extend để thêm ["đi bộ", "học"] vào cuối cùng một lúc.

③ Dùng insert để chèn "ăn sáng" vào đầu.

④ Dùng remove để xóa "gym", rồi print() list cuối cùng.

Python Editor

Chạy code để xem đầu ra

Sắp xếp và tìm kiếm (sort / reverse / count / index)

List cũng có các phương thức sắp xếptìm kiếm. Điều quan trọng ở đây là có hai loại phương thức.

- Phương thức làm thay đổi list (sort / reverse) → không cần lấy giá trị trả về; chính list sẽ đổi

- Phương thức trả về giá trị (count / index) → sử dụng giá trị trả về, ví dụ print(list.count(...))

Thay đổi vs trả về
sort()reverse()list.sort()(không trả về)list tựthay đổicount()index()n = list.count(x)nhậnkết quảcách dùngtác độngcách dùngtrả về

sort / reverse: sửa list trực tiếp. Đừng gán kết quả.

count / index: không đụng đến list — chúng trả về giá trị. Hãy nhận và dùng.

fruits = ["banana", "lemon", "apple", "grape"]

# (1) Phương thức thay đổi: chỉ cần gọi, list đã đổi
fruits.sort()
print(fruits)          # ['apple', 'banana', 'grape', 'lemon']

fruits.reverse()
print(fruits)          # ['lemon', 'grape', 'banana', 'apple']

# (2) Phương thức trả về: nhận và dùng giá trị trả về
nums = [1, 2, 2, 3, 2, 4]
print(nums.count(2))   # 3 (có ba số 2)
print(nums.index(3))   # 3 (số 3 là phần tử thứ 4 = index 3)

Vì sao print(fruits.sort()) lại in ra None

Một lỗi phổ biến: viết print(fruits.sort()) và thấy None được in ra. sort() không trả về giá trị — nó sắp xếp fruits tại chỗ.

Cách sửa đúng là gọi fruits.sort() riêng, rồi print(fruits) ở dòng tiếp theo — tách thành hai dòng.

Nhân tiện, chi tiết về giá trị trả về (giá trị mà phương thức và hàm trả lại) sẽ được trình bày trong các bài về hàm và lập trình hướng đối tượng. Bây giờ, bạn chỉ cần nhớ hai mẫu: "sort / reverse làm list thay đổi chỉ bằng lời gọi" và "count / index được nhận bằng = rồi sử dụng".

Hãy phân tích một list điểm kiểm tra: scores = [72, 85, 91, 68, 77, 95, 85].

① Dùng sort() để sắp xếp tăng dần, rồi print() list đã sắp xếp.

② Dùng count() để print() có bao nhiêu người được 85 điểm.

Python Editor

Chạy code để xem đầu ra

Trong bài này, bạn đã học cách tạo và truy cập list, slice, thêm và xóa phần tử, cùng sắp xếp và tìm kiếm.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Với nums = [10, 20, 30], nums sẽ chứa gì sau khi bạn chạy nums.append([40, 50])?

Câu 2Với items = [3, 1, 4, 1, 5], print(items.sort()) in ra gì?

Câu 3Với data = [10, 20, 30, 40], kết quả của data[-2:] là gì?