Mỗi hàng có cùng số cột
Bảng số dưới đây có **2 hàng, 3 cột**:
```python
a = [[4, 6, 8],
[5, 7, 9]]
```
Trong ví dụ ma trận này, mọi hàng có ba số. `a[0][2]` là 8 vì đó là cột thứ ba của hàng thứ nhất; `a[1][1]` là 7. Cách nói “hàng thứ nhất” theo đời thường ứng với chỉ số 0 trong Python. Nếu các hàng dài khác nhau, vẫn là danh sách chứa danh sách nhưng không còn là bảng chữ nhật 2 × 3 như mô tả.
Vòng ngoài chọn hàng, vòng trong chọn cột
Để in đủ các ô theo từng hàng:
```python
for i in range(len(a)):
for j in range(len(a[i])):
print(a[i][j], end=" ")
print()
```
Với `a` ở trên, vòng ngoài đi qua `i=0` rồi `i=1`. Mỗi lần, vòng trong đọc các cột của chính hàng ấy; `print()` cuối vòng ngoài xuống dòng. Kết quả là hai dòng `4 6 8` và `5 7 9`. Cách dùng `len(a[i])` vẫn duyệt được khi một hàng ngắn hơn, nhưng khi gọi dữ liệu là ma trận m × n thì cần xác nhận tất cả hàng có cùng n phần tử.
Bài luyện
Với `a = [[4, 6, 8], [5, 7, 9]]`, `a[1][2]` là bao nhiêu?
6 thuộc hàng 0 cột 1.
7 thuộc hàng 1 cột 1.
8 thuộc hàng 0 cột 2.
Hàng 1 là hàng thứ hai; cột 2 là cột thứ ba.
Lời giải
a[1] là `[5, 7, 9]`; phần tử chỉ số 2 của hàng này là 9.
Bài luyện
Để duyệt bảng theo từng hàng và từng cột, vai trò hợp lí của hai vòng lặp là gì?
Cách này không đi qua từng ô theo hàng.
Mỗi cặp chỉ số i,j xác định một ô.
Thiếu chỉ số cột.
Bảng có sáu ô, không chỉ hai.
Lời giải
Vòng ngoài lần lượt chọn từng hàng i. Với mỗi hàng, vòng trong duyệt các cột j để đọc a[i][j].
Bài luyện
Dữ liệu `[[4, 6, 8], [5, 7]]` khác ma trận 2 × 3 ở điểm nào?
Bảng 2 × 3 cần mỗi hàng có ba phần tử.
Giá trị 4 không quyết định hình dạng.
Kiểu số không sửa được thiếu cột.
Hai hàng đúng, nhưng số cột không đều.
Lời giải
Hàng thứ nhất dài 3, hàng thứ hai dài 2; không thể gọi đây là ma trận chữ nhật 2 × 3.
Đang học