Kiểm phần tử khác với duyệt từng phần tử
`"bút" in do_vat` cho `True` nếu danh sách có phần tử **bằng** xâu `"bút"`. Với `do_vat = ["bút", "vở"]`, số `1 in do_vat` là `False`: phép kiểm so sánh **giá trị**, không hỏi có chỉ số 1 hay không. `for x in do_vat:` lại gán x lần lượt bằng từng phần tử để xử lí. Cùng từ `in`, nhưng một trường hợp tạo kết quả bool, trường hợp kia là một phần của câu lệnh lặp.
Bài luyện
Với `do_vat = ["bút", "vở"]`, biểu thức `1 in do_vat` cho gì?
in xét giá trị phần tử, không xét chỉ số.
Hai phần tử là xâu, không có số 1.
Biểu thức in trả bool.
Toán tử in dùng được với list.
Lời giải
Danh sách có hai giá trị xâu `"bút"` và `"vở"`. Không giá trị nào bằng số 1, nên `1 in do_vat` là `False`.
Mỗi phương thức sửa theo một cách
`append(x)` thêm x ở cuối; `insert(i, x)` chèn x **trước vị trí i**; `remove(x)` xóa phần tử đầu tiên có giá trị bằng x; `clear()` xóa hết phần tử. `remove` báo `ValueError` nếu không tìm thấy x, nên có thể kiểm `x in A` trước khi gọi.
```python
A = [2, 4, 2]
A.insert(1, 9)
A.remove(2)
print(A)
```
Sau insert, A là `[2, 9, 4, 2]`; remove(2) xóa **số 2 đầu tiên**, được `[9, 4, 2]`. Xóa theo vị trí là việc khác: `del A[0]` xóa phần tử ở chỉ số 0.
Bài luyện
Sau mã insert rồi remove trong bài, A là gì?
remove(2) xóa số 2 đầu tiên, không phải số cuối.
Insert đặt 9 trước phần tử chỉ số 1, remove bỏ số 2 đầu.
Thứ tự sau insert là 2,9,4,2.
Số 4 vẫn đứng trước số 2 cuối.
Lời giải
A từ `[2,4,2]` thành `[2,9,4,2]` sau chèn. `remove(2)` xóa lần xuất hiện đầu ở chỉ số 0, còn `[9,4,2]`.
Bài luyện
Nếu `A = [2, 4]`, gọi `A.remove(9)` sẽ thế nào?
remove báo lỗi khi không có giá trị.
remove không thêm phần tử.
Không tìm thấy 9 để xóa.
Tham số của remove là giá trị, không phải chỉ số.
Lời giải
`remove(9)` tìm phần tử có giá trị 9. Danh sách chỉ có 2 và 4, nên phương thức báo `ValueError`.
Bài luyện
Muốn đưa danh sách A về rỗng nhưng giữ chính biến A, lệnh nào đúng?
clear xóa mọi phần tử của list.
remove cần giá trị cần xóa.
insert cần vị trí và giá trị.
append thêm một phần tử là list rỗng, A không rỗng.
Lời giải
`A.clear()` xóa toàn bộ các phần tử trong A. Sau lệnh, `len(A) = 0` nhưng biến A vẫn tham chiếu tới list đó.
Đang học