Menu

List trong Python: tạo, chỉ số, append, sort và duyệt list

Tìm hiểu list trong Python, kiểu tập hợp phổ biến nhất: cách tạo, chỉ số, cắt list, append, sort và những mẫu code bạn sẽ dùng nhiều nhất.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

List là dãy có thứ tự và thay đổi được

List là kiểu tập hợp được dùng nhiều nhất trong Python. Nếu bạn cần giữ một dãy giá trị có thứ tự và có thể thay đổi (thêm, xóa, sắp xếp, cập nhật), list gần như luôn là lựa chọn đúng.

Bạn tạo list bằng dấu ngoặc vuông:

List chứa được mọi thứ, kể cả list khác. Trên thực tế, phần lớn list chỉ chứa một loại dữ liệu, như danh sách người dùng hay danh sách số, vì như vậy dễ suy luận nhất.

Chỉ số

Mỗi phần tử (element) có một vị trí, bắt đầu từ 0. Truy cập bằng dấu ngoặc vuông:

Truy cập một chỉ số (index) không tồn tại sẽ gây ra IndexError. Nếu có khả năng vượt phạm vi, hãy kiểm tra độ dài trước hoặc bọc phép truy cập trong try.

Cắt list (slicing)

Slicing trả về một khoảng phần tử. Cú pháp là list[start:stop:step], giống như với chuỗi:

Hai điều nên nhớ kỹ:

  • Slicing luôn trả về một list mới. Sửa phần được cắt ra không ảnh hưởng đến list gốc.
  • Chỉ số stop không được tính: nums[2:5] cho các chỉ số 2, 3 và 4, không có 5.

Cách append, extend và insert phần tử

Ba phương thức "thêm vào list" làm những việc khác nhau, và nhầm lẫn giữa chúng là nguồn bug rất hay gặp:

  • append(x) thêm x như một phần tử duy nhất, kể cả khi x là một list. items.append([1, 2]) thêm chính list đó thành một phần tử.
  • extend(iterable) thêm từng phần tử lấy từ iterable. items.extend([1, 2]) thêm hai phần tử.
  • insert(i, x) chèn vào một chỉ số cụ thể, đẩy mọi phần tử từ vị trí i trở đi lùi về sau một vị trí.

+= với một list ở vế phải hoạt động như extend:

Còn để xóa:

Nếu bạn remove() một thứ không có trong list, Python sẽ báo ValueError. Nếu cần "xóa nếu có", hãy kiểm tra bằng in trước hoặc dùng try.

Bạn cũng có thể xóa theo chỉ số bằng del:

Độ dài, kiểm tra phần tử, đếm

in là cách dễ đọc để kiểm tra list có chứa một giá trị hay không. Nếu bạn sẽ hỏi câu đó nhiều lần trên một list lớn, hãy dùng set: kiểm tra phần tử trong set là O(1), còn trong list là O(n).

Sắp xếp

Có hai cách, và chọn cách nào là điều quan trọng:

Cả hai đều nhận reverse=True để sắp xếp giảm dần:

Và một hàm key để tùy chỉnh thứ tự:

key được áp dụng cho từng phần tử, và kết quả của nó là thứ được đem ra so sánh. Các trường hợp hay gặp: sắp xếp theo độ dài, theo một thuộc tính cụ thể, hoặc theo dạng chữ thường của chuỗi.

Đảo ngược

Ba kiểu, tùy theo nhu cầu:

Dùng cách tại chỗ khi không cần list gốc. Dùng slicing khi muốn một bản sao mới. Dùng reversed() khi chỉ cần lặp theo chiều ngược mà không tạo ra list mới.

Cái bẫy tham chiếu chung

List thay đổi được (mutable), còn biến là tham chiếu. Nghĩa là hai biến có thể cùng trỏ vào một list:

b = a không sao chép list; nó chỉ khiến b thành tên thứ hai của cùng một list. Nếu muốn một bản sao, hãy yêu cầu rõ ràng:

Lập trình viên Python nào cũng dính lỗi này ít nhất một lần. Nhớ rằng: = giữa hai list không sao chép.

Lặp và tạo list

Bạn đã biết mẫu cơ bản từ trang về vòng lặp for:

Cách này dễ đọc và lúc nào cũng ổn. Khi đã quen tay, list comprehension tương đương làm đúng việc đó trên một dòng:

Chúng ta sẽ tìm hiểu kỹ comprehension ở trang sau nữa.

Cheat sheet nhanh

Những phương thức đáng biết, xem nhanh:

  • append(x): thêm vào cuối
  • extend(iter): thêm từng phần tử từ một iterable
  • insert(i, x): chèn vào chỉ số i
  • pop() / pop(i): xóa và trả về
  • remove(x): xóa lần xuất hiện đầu tiên của x
  • sort() / sort(key=...) / sort(reverse=True)
  • reverse()
  • index(x): vị trí của x đầu tiên
  • count(x): số lần x xuất hiện
  • copy(): sao chép nông (shallow copy)

Tiếp theo

List là công cụ chủ lực. Tiếp theo, chúng ta sẽ xem tuple, người anh em không thay đổi được của list, và khi nào chọn tuple là quyết định tốt hơn.

Câu hỏi thường gặp

Làm sao để tạo list trong Python?

Dùng dấu ngoặc vuông với các giá trị cách nhau bằng dấu phẩy: fruits = ['apple', 'banana', 'cherry']. List chứa được mọi kiểu dữ liệu, và bạn có thể trộn nhiều kiểu trong cùng một list, dù trên thực tế phần lớn list chỉ chứa một kiểu theo thói quen.

Làm sao để sắp xếp list trong Python?

Gọi .sort() trên list để sắp xếp ngay tại chỗ, hoặc dùng hàm có sẵn sorted(list) để nhận một list mới đã sắp xếp mà không đổi list gốc. Cả hai đều nhận cờ reverse=True để sắp xếp giảm dần và đối số key= để tùy chỉnh tiêu chí sắp xếp.

Làm sao để đảo ngược list trong Python?

list.reverse() đảo ngược ngay tại chỗ. list[::-1] trả về một list mới đã đảo ngược. reversed(list) trả về một iterator để bạn lặp qua. Chọn cách hợp với nhu cầu: sửa tại chỗ, tạo bản sao mới hay lặp lười (lazy).

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu