1. Khái niệm kiểu danh sách (List)
- Định nghĩa & Khai báo: Danh sách là một tập hợp các phần tử có thứ tự và được đặt trong cặp dấu ngoặc vuông [], phân cách nhau bởi dấu phẩy ,.
- Đánh chỉ số (Index):
- Chỉ số dương (từ trái sang phải): Bắt đầu từ 0 đến n - 1.
- Chỉ số âm (từ phải sang trái): Bắt đầu từ -1 đến -n.
- Truy cập phần tử: Sử dụng cú pháp <tên danh sách>[chỉ số].
2. Các phép toán, hàm tích hợp và câu lệnh cơ bản
- Độ dài danh sách: Dùng hàm len(<danh sách>) để lấy số lượng phần tử.
- Phép cộng (ghép danh sách): Dùng toán tử + để nối hai hay nhiều danh sách lại với nhau.
- Phép nhân (lặp danh sách): Dùng toán tử * với một số nguyên để lặp lại danh sách theo số lần quy định.
- Phép toán kiểm tra thành viên: Toán tử in và not in dùng để kiểm tra một phần tử có nằm trong danh sách hay không, trả về giá trị True hoặc False.
- Tính toán trên danh sách số: Hàm min() tìm phần tử nhỏ nhất, max() tìm phần tử lớn nhất, và sum() tính tổng tất cả các phần tử.
- Xóa phần tử theo chỉ số: Câu lệnh del <danh sách>[chỉ số] dùng để xóa phần tử tại vị trí cụ thể.
- Sắp xếp danh sách: Hàm sorted(<danh sách>) trả về một danh sách mới đã được sắp xếp tăng dần; thêm tham số reverse=True để sắp xếp giảm dần.
- So sánh hai danh sách: Python cho phép so sánh hai danh sách bằng các toán tử ==, <, > dựa trên việc so sánh lần lượt các phần tử tương ứng từ trái sang phải.
3. Các phương thức (Methods) của danh sách
Danh sách cung cấp nhiều phương thức tích hợp sẵn để thao tác dữ liệu:
- append(x): Bổ sung phần tử x vào cuối danh sách.
- extend(L): Mở rộng danh sách bằng cách nối tất cả các phần tử của danh sách L vào cuối.
- Phân biệt append và extend: append(c) coi c là một phần tử đơn lẻ để thêm vào (nếu c là danh sách thì nó sẽ trở thành danh sách con ở cuối); trong khi extend(c) sẽ giải nén các phần tử của c và thêm lần lượt từng phần tử vào cuối.
- insert(index, x): Chèn phần tử x vào vị trí index.
- pop(): Xóa và trả về phần tử cuối cùng của danh sách.
- remove(x): Xóa phần tử đầu tiên trong danh sách có giá trị bằng x.
- clear(): Xóa toàn bộ dữ liệu, đưa danh sách về rỗng [].
- copy(): Trả về một bản sao độc lập của danh sách.
- index(x): Trả về chỉ số xuất hiện đầu tiên của giá trị x.
- count(x): Đếm số lần xuất hiện của giá trị x trong danh sách.
- sort(): Sắp xếp trực tiếp các phần tử của danh sách theo thứ tự tăng dần (sort(reverse=True) để giảm dần).
- reverse(): Đảo ngược thứ tự các phần tử trong danh sách.
4. Khởi tạo danh sách nâng cao & Cắt danh sách (Slicing)
- List Comprehension (Tạo danh sách ngắn gọn):
- Cú pháp 1: [<biểu thức> for <phần tử> in <tập giá trị>].
- Cú pháp 2 (có điều kiện): [<biểu thức> for <phần tử> in <tập giá trị> if <điều kiện>].
- Cú pháp lồng nhau: Sử dụng nhiều vòng for lồng nhau để tạo danh sách đa chiều.
- Cắt danh sách (Slicing): Cú pháp <danh sách>[a:b:c] trả về danh sách con gồm các phần tử từ chỉ số a đến b - 1 với bước nhảy c.
- Ma trận (Danh sách 2 chiều): Biểu diễn dưới dạng danh sách chứa các danh sách con.
- Truy cập phần tử hàng i, cột j: <danh sách>[i][j].
- Khởi tạo ma trận bằng List Comprehension: [[int(input()) for j in range(n)] for i in range(m)].
5. Các dạng bài tập vận dụng kinh điển
- Đếm & Tính tổng số chẵn (SEVEN.PY): Duyệt các phần tử trong danh sách for i in a: và kiểm tra điều kiện chia dư i % 2 == 0 để đếm hoặc tính tổng.
- Sắp xếp dãy số (SORT.PY): Sử dụng phương thức a.sort() để sắp xếp nhanh dãy số đầu vào.
- Số nguyên tố trong dãy (PRIMES.PY): Duyệt từng phần tử của danh sách và áp dụng thuật toán kiểm tra số nguyên tố.
- Kiểm tra dãy cấp số cộng (CSC.PY): Kiểm tra khoảng cách a[i] - a[i-1] giữa các phần tử liên tiếp có bằng nhau hay không.
- Tìm số lớn nhất, nhỏ nhất (MAXMIN.PY): Áp dụng trực tiếp hàm max(a) và min(a) trên danh sách.
- Tìm kiếm vị trí (FIND.PY): Duyệt qua danh sách bằng chỉ số để tìm vị trí xuất hiện đầu tiên của giá trị k.