Bài 27. Sửa đổi danh sách: chèn, xoá, sắp xếp và cắt lát
Sau khi đã biết tạo danh sách và duyệt qua từng phần tử, bài này đi sâu vào nhóm lệnh giúp thay đổi danh sách khi chương trình đang chạy: chèn thêm, xoá bớt, tra cứu, sắp xếp lại thứ tự và lấy ra một phần của danh sách bằng lát cắt. Đây là những lệnh xuất hiện rất dày trong các câu hỏi lập trình của đề thi.
- Cánh DiềuTin học 10 - Chủ đề F · Bài 15. Thực hành với kiểu dữ liệu danh sáchtr. 107
- Kết nối tri thứcTin học 10 - Bài 23. Một số lệnh làm việc với dữ liệu danh sáchtr. 115–118
Bắt đầu bằng một hình dung
Cuối giờ sinh hoạt, lớp trưởng cầm tờ giấy ghi tên những bạn đăng kí đi cắm trại. Ban đầu danh sách có tám tên, viết theo đúng thứ tự các bạn giơ tay. Rồi mọi chuyện bắt đầu rối lên: một bạn xin rút vì hôm đó nhà có việc, một bạn khác lại chạy tới xin ghi tên bổ sung, và cô giáo dặn phải ghi tên bạn ấy ngay sau tên người cùng tổ để tiện chia nhóm.
Lớp trưởng loay hoay: muốn bỏ một tên thì gạch đi, nhưng gạch xong tờ giấy trông lem nhem; muốn chèn một tên vào giữa thì không còn chỗ trống, đành viết chen vào lề rồi vẽ mũi tên. Đến khi cô yêu cầu nộp danh sách đã xếp theo thứ tự chữ cái, bạn ấy phải chép lại toàn bộ ra một tờ giấy mới.
Cuối buổi, cô hỏi thêm: trong danh sách có bạn nào tên Hà không, nếu có thì đứng thứ mấy, và có bao nhiêu bạn trùng tên đó? Lớp trưởng lại phải dò từ đầu tới cuối bằng mắt.
Mọi thao tác vừa kể - chèn vào giữa, xoá đi một cái, xếp lại thứ tự, dò tìm, đếm số lần xuất hiện, lấy ra vài tên đầu danh sách - đều là những việc mà máy tính làm được chỉ bằng một câu lệnh ngắn. Bài học hôm nay chính là bộ công cụ đó.
Nội dung bài học
- 1) Chèn và xoá phần tử ở vị trí bất kì
- 2) Tra cứu an toàn: in, index và count
- 3) Sắp xếp, đảo chiều và cắt lát danh sách
Tóm tắt lý thuyết cần nhớ
- Nhóm lệnh sửa danh sách tại chỗ:
a.insert(i, x)chèn x vào ô i và đẩy các phần tử sau lùi lại;a.remove(x)xoá phần tử ĐẦU TIÊN có giá trị x;a.pop(i)xoá theo vị trí và trả về giá trị vừa xoá;del a[i]xoá theo vị trí;a.clear()xoá sạch. - Nhóm lệnh tra cứu:
x in acho True/False,a.index(x)cho vị trí xuất hiện đầu tiên,a.count(x)đếm số lần xuất hiện. Phải kiểm tra bằngintrước khi gọiindexhoặcremove, vì hai lệnh này báo lỗi khi không tìm thấy giá trị. a.sort()(vàa.sort(reverse=True)) cùnga.reverse()làm thay đổi danh sách gốc, trong khisorted(a)trả về một danh sách mới và giữ nguyên a - tuyệt đối không viếta = a.sort().- Lát cắt
a[i:j]lấy từ ô i đến TRƯỚC ô j và luôn cho một danh sách mới;a[:k]là k phần tử đầu,a[k:]là từ ô k đến hết,a[-1]là phần tử cuối. Riêngb = achỉ tạo tên gọi thứ hai cho cùng một danh sách, muốn bản sao độc lập phải dùnga.copy()hoặca[:].
Thuật ngữ tiếng Anh trong bài
| Tiếng Anh | Đọc là | Nghĩa |
|---|---|---|
| list | lít | danh sách Một dãy nhiều giá trị xếp hàng, giống hộp bút có nhiều ô. |
| index | IN-đéc | chỉ số Số thứ tự của một phần tử. |
| append | ơ-PEN-đờ | thêm phần tử vào cuối danh sách Thêm một phần tử mới vào cuối một danh sách đang có - như xếp thêm một bạn vào cuối hàng đang đứng. |
| value | VA-liu | giá trị Thông tin đi kèm với một khoá - giống số điện thoại đi kèm với cái tên trong sổ liên lạc. |
Câu hỏi trắc nghiệm có đáp án
Mấy câu mẫu để bạn tự kiểm tra ngay. Trong ứng dụng, bài này có đủ 25 câu, chấm điểm tự động và giải thích từng câu sai.
- x = 9 và a = [4, 2, 7]
- x = 1 và a = [4, 9, 2, 7]
- x = 4 và a = [9, 2, 7]
- x = 9 và a = [4, 9, 2, 7]
- [20, 30, 40]
- [20, 30]
- [10, 20, 30]
- [30, 40]
- [1, 3, 5]
- [5, 3, 1]
- [5, 1, 3]
- [] (danh sách rỗng)
- a)Lệnh a.remove(5) xoá phần tử đầu tiên có giá trị 5; nếu trong a không hề có giá trị 5 thì chương trình sẽ báo lỗi và dừng lại.Đúng
- b)Lệnh a.reverse() trả về một danh sách mới đã đảo ngược, còn danh sách a vẫn giữ nguyên thứ tự cũ.Sai
- c)Với a = [3, 8, 1, 6], lát cắt a[:2] cho kết quả [3, 8].Đúng
- d)Sau lệnh b = a, nếu ta thêm một phần tử vào b thì danh sách a vẫn không hề thay đổi.Sai
- (a) Đúng - remove xoá theo giá trị và chỉ xoá lần xuất hiện đầu tiên; khi giá trị cần xoá không có mặt, lệnh này sinh lỗi, vì vậy nên kiểm tra bằng 'if 5 in a:' trước khi gọi.
- (b) Sai - a.reverse() đảo ngược trực tiếp trên chính danh sách a chứ không trả về danh sách mới; muốn giữ nguyên bản gốc phải dùng cách khác như lát cắt hoặc tạo bản sao trước.
- (c) Đúng - a[:2] nghĩa là lấy các phần tử từ đầu đến TRƯỚC ô chỉ số 2, tức hai phần tử đầu tiên là 3 và 8.
- (d) Sai - b = a chỉ tạo thêm một tên gọi trỏ tới cùng một danh sách trong bộ nhớ, nên mọi thay đổi trên b đều hiện ra ở a; muốn độc lập phải viết b = a.copy() hoặc b = a[:].
Thử ngay: minh hoạ từng bước
Bấm từng bước để tự xem cơ chế hoạt động, hoặc bấm “Tự chạy” cho nó tiến mỗi giây một lần. Đổi được dữ liệu đầu vào - không cần đăng nhập.
Học trọn bài này trong ứng dụng
Bài giảng đầy đủ, 25 câu luyện tập chấm tự động, thi thử đúng cấu trúc đề tốt nghiệp (24 trắc nghiệm + 4 Đúng/Sai), bài thực hành máy tự chấm và gia sư AI giải thích chỗ sai.
Phần học miễn phí, không cần tạo tài khoản.
Bài liên quan - Lập trình, Thuật toán & CTDL (KHMT)
Cùng mạch kiến thức với bài này, học nối tiếp cho chắc phần lí thuyết.