Mảng một chiều¶
Tóm lược nội dung
Bài này trình bày những khái niệm về mảng nói chung và mảng một chiều nói riêng.
Đặt vấn đề¶
Khi xử lý bảng điểm môn Tin học của một lớp gồm 30 học sinh, việc khai báo 30 biến có vẻ không ổn. Thử xem đoạn mã khai báo sau đây bất tiện như thế nào.
Nếu số học sinh nhiều hơn, chẳng hạn 500 học sinh cả khối, thì việc khai báo từng biến là hoàn toàn bất khả thi.
May thay, các ngôn ngữ lập trình đều có hỗ trợ những kiểu dữ liệu dành cho trường hợp bảng điểm như trên, và Python cũng vậy.
Python cũng vậy. Một kiểu dữ liệu của Python có thể giúp xử lý tập hợp nhiều dữ liệu là kiểu list
.
Khái quát về mảng¶
Mảng là cấu trúc dữ liệu dùng để lưu trữ và xử lý tập hợp các phần tử, trong đó:
- Các phần tử được lưu trữ liên tiếp nhau trên bộ nhớ.
- Trong nhiều ngôn ngữ, kích thước hoặc độ dài của mảng là số lượng phần tử mà mảng có thể chứa. Số lượng phần tử là hữu hạn.
- Mỗi phần tử gồm có hai yếu tố: giá trị và chỉ số.
- Mỗi phần tử được truy xuất thông qua chỉ số của nó.
- Giá trị của các phần tử đều cùng kiểu dữ liệu.
Mảng thường được dùng để giải quyết những bài toán có nhiều giá trị liên quan và cùng kiểu dữ liệu.
Ví dụ:
- Điểm số môn Tin học của các học sinh trong lớp.
- Dữ liệu thời gian ghi nhận được ở các lần đo trong thí nghiệm đo thời gian rơi của một vật.
Nói rõ thêm về mảng
-
Về mặt khái niệm, các phần tử của một mảng được lưu trữ liên tiếp nhau trong bộ nhớ. Tuy nhiên, trên thực tế, trong khi mảng tĩnh vẫn được lưu trữ liên tiếp nhau, thì mảng động hoặc các cấu trúc dữ liệu tương đương thì không nhất thiết lưu trữ liên tiếp nhau, mà các phần tử có thể nằm rải rác trên bộ nhớ.
-
Trong một số ngôn ngữ "truyền thống" như C hay Java, các phần tử của mảng phải có cùng kiểu dữ liệu. Trái lại, một số ngôn ngữ hiện đại như JavaScript, Ruby, Python cho phép mảng (danh sách) chứa các phần tử có kiểu dữ liệu khác nhau.
Phân loại theo chiều, các loại mảng gồm có:
- Mảng một chiều
- Mảng hai chiều
- Mảng đa chiều.
Bài học này chỉ đề cập mảng một chiều.
Hỏi chút chơi - phần 1
Mảng trong Python¶
Trong Python, kiểu dữ liệu list
có thể được sử dụng để biểu diễn mảng. (Do đã được đề cập trong chương trình lớp 10, nên các bài học về mảng ở lớp 11 sẽ không dùng kiểu list
nữa.)
Bên cạnh đó, Python cũng có sẵn thư viện array
để làm việc với mảng.
Đặc biệt, thư viện mã nguồn mở numpy giúp xử lý mảng nhanh hơn.
Một số bài học ở lớp 11 này sẽ sử dụng thư viện numpy
khi minh hoạ các vấn đề liên quan đến mảng.
Hỏi chút chơi - phần 2
Mảng một chiều¶
Hình ảnh mảng một chiều trong thực tế:
- Dãy các phòng học
- Dãy ghế trong rạp chiếu phim
Mảng một chiều có thể áp dụng khi xử lý:
- Một dãy số
- Một hàng hoặc một cột trong bảng
Chỉ số của các phần tử được đánh từ 0 hoặc từ 1, tuỳ ngôn ngữ lập trình. Chỉ số còn có thể xem là vị trí của phần tử trong mảng.
Minh họa mảng một chiều A
Cài đặt thư viện numpy¶
Để sử dụng thư viện numpy
, ta cài đặt bằng pip
.
Trong cửa sổ Terminal của Visual Studio Code (1) (hoặc PowerShell hoặc Command Prompt của Windows), gõ lệnh sau:
- Mở cửa sổ Terminal bằng phím tắt Ctrl+` hoặc chọn menu View > Terminal.
Import thư viện numpy¶
Để sử dụng thư viện numpy
, ta cần import nó vào chương trình Python.
Khởi tạo¶
Để khởi tạo mảng một chiều bằng thư viện numpy
, ta sử dụng hàm array()
của thư viện.
Các phần tử được liệt kê trong cặp ngoặc vuông [ ]
và phân cách nhau bằng dấu phẩy ,
.
Ví dụ:
Yêu cầu: Khởi tạo mảng một chiều A
bằng cách liệt kê phần tử.
-
f'...'
là cú pháp f-string (formatted string literal) của Python giúp hiển thị giá trị của biếnA
.Khi sử dụng f-string, các biến hoặc biểu thức bên trong dấu
{}
sẽ được thay thế bằng giá trị tương ứng.
Output:
Để khởi tạo mảng một chiều gồm các phần tử cùng giá trị, ta dùng hàm full()
của thư viện numpy
.
Ví dụ:
Yêu cầu: Khởi tạo mảng một chiều zeros
gồm toàn các phần tử có giá trị 0
.
Output:
Hỏi chút chơi - phần 3
Truy xuất phần tử¶
Mỗi phần tử của mảng một chiều được truy xuất thông qua chỉ số. Chỉ số được đặt trong cặp ngoặc vuông [ ]
.
Phần tử đầu tiên có chỉ số là 0
và phần tử cuối cùng có chỉ số là len(mảng) - 1
.
Ví dụ:
Yêu cầu: In ra màn hình giá trị của phần tử đầu tiên và cuối cùng của mảng A.
Output:
Đoạn mã sau đây bị lỗi vì mảng A
không có phần tử mang chỉ số 12
.
Nội dung báo lỗi trong Visual Studio Code:
Exception has occurred: IndexError
index 12 is out of bounds for axis 0 with size 12
File "D:\ProjectLocal\gdpt-2018\g11\topic-f2\array-1-dimension-numpy.py", line 19, in <module>
print(f'Phần tử thứ 12 của mảng A: {A[12]}')
~^^^^
IndexError: index 12 is out of bounds for axis 0 with size 12
Hỏi chút chơi - phần 4
Duyệt mảng¶
Trong nhiều bài toán, các phần tử của mảng thường được xử lý một loạt tương tự nhau, theo thứ tự từ phần tử đầu đến phần tử cuối. Do đó, ta thường sử dụng vòng lặp để duyệt mảng.
Ví dụ:
Yêu cầu: Duyệt mảng để in ra các phần tử từ đầu đến cuối. Mỗi phần tử nằm trên một dòng.
Output:
A[0] = 1
A[1] = 7
A[2] = 4
A[3] = 0
A[4] = 9
A[5] = 4
A[6] = 8
A[7] = 8
A[8] = 2
A[10] = 5
A[11] = 5
Ví dụ:
Yêu cầu: Duyệt mảng để in ra các phần tử từ cuối ngược về đầu. Các phần tử nằm trên cùng một dòng.
-
Tham số
end
của hàmprint()
có giá trị mặc định là'\n'
, nghĩa là xuống dòng sau khi in ra từng phần tử.end=' '
giúp in ra khoảng trắng sau mỗi phần tử.
Output:
Hỏi chút chơi - phần 5
Sơ đồ tóm tắt nội dung¶
Sơ đồ tóm tắt về mảng và mảng một chiều
Mã nguồn¶
Các đoạn mã trong bài được đặt tại:
Some English words¶
Vietnamese | Tiếng Anh |
---|---|
chỉ số (của phần tử) | index |
đánh chỉ số từ 0 | zero-based indexing |
giá trị (của phần tử) | value |
mảng một chiều | one-dimensional array |
phần tử | element, item |