Nhiệm vụ và dữ liệu
Trên bảng giả `a = [[2, 1, 2], [3, 2, 1]]`, cần liệt kê các giá trị phân biệt theo thứ tự gặp lần đầu và tìm tất cả vị trí của số 2. Kết quả dự kiến: các giá trị `[2, 1, 3]`; số 2 xuất hiện ba lần ở **(hàng 1, cột 1), (hàng 1, cột 3), (hàng 2, cột 2)**. Bài này báo vị trí từ 1 cho người đọc; chỉ số dùng trong mã vẫn từ 0.
Đi qua từng ô, không bỏ lần lặp
```python
a = [[2, 1, 2], [3, 2, 1]]
gia_tri = []
vi_tri_so_2 = []
for i in range(len(a)):
for j in range(len(a[i])):
x = a[i][j]
if x not in gia_tri:
gia_tri.append(x)
if x == 2:
vi_tri_so_2.append((i + 1, j + 1))
print(gia_tri)
print(len(vi_tri_so_2), vi_tri_so_2)
```
Chạy tệp `tim_trong_ma_tran.py` được `[2, 1, 3]` rồi `3 [(1, 1), (1, 3), (2, 2)]`. `if x not in gia_tri` chỉ thêm một lần cho mỗi giá trị; điều kiện `x == 2` ghi **mỗi lần xuất hiện**, nên không dùng `elif` để thay thế. Để tìm số khác, đặt `can_tim = ...` và thay điều kiện bằng `x == can_tim`. Nếu tìm số 9 trong bảng này, danh sách vị trí rỗng và số lần là 0; không báo một vị trí giả. Bài sách dùng hai danh sách song song để đếm theo từng giá trị; ở đây chỉ cần tìm một giá trị nên một danh sách vị trí là đủ.
Bài luyện
Dãy giá trị phân biệt theo thứ tự gặp đầu tiên của `[[2,1,2],[3,2,1]]` là gì?
Đây là thứ tự tăng dần, không phải thứ tự gặp.
Duyệt theo hàng: gặp 2, rồi 1, rồi 3.
2 bị lặp, chỉ giữ một lần.
1 xuất hiện trước 3.
Lời giải
Duyệt hàng đầu rồi hàng sau: lần đầu gặp 2, tiếp đến 1, cuối cùng 3. Các lần lặp lại không thêm nữa.
Bài luyện
Số 2 có bao nhiêu vị trí trong bảng và ở đâu theo số thứ tự từ 1?
Còn số 2 ở hàng 1 cột 3.
Ba ô đó có giá trị 2 khi báo hàng/cột từ 1.
Đây là chỉ số Python từ 0, trái quy ước báo kết quả.
Một giá trị có thể xuất hiện nhiều lần.
Lời giải
Hàng 1 có số 2 ở cột 1 và 3; hàng 2 có số 2 ở cột 2. Tổng cộng ba vị trí theo số thứ tự từ 1.
Bài luyện
Nếu tìm số 9 trong bảng ví dụ, kết quả nào đúng?
Không có ô nào bằng 9.
Không có vị trí 0 theo quy ước báo.
Ô (1,1) là 2.
Không tìm thấy là kết quả hợp lệ, không phải lỗi truy cập.
Lời giải
Điều kiện x==9 không đúng ở ô nào, nên không thêm vị trí; độ dài danh sách vị trí bằng 0.
Đang học