Mảng trong Python
Mảng trong Python là gì? Cách tạo mảng Python như thế nào? Bài viết sẽ cung cấp cho bạn mọi điều cần biết về mảng hay array trong Python.
Mảng là một phần cơ bản của tất cả các ngôn ngữ lập trình, nó là tập hợp các phần tử của một kiểu dữ liệu duy nhất, ví dụ mảng số nguyên, mảng chuỗi. Không giống như mảng, mỗi list có thể lưu trữ phần tử với bất kỳ kiểu dữ liệu nào và làm được mọi thứ mà mảng có thể làm. Chúng ta có thể lưu trữ số nguyên, số thập phân, chuỗi trong cùng một list. Vì thế, làm việc với list khá linh hoạt. Tuy nhiên, trong Python, không có cấu trúc dữ liệu mảng gốc. Vì vậy, chúng ta sử dụng các list Python thay cho mảng.
Một mảng các giá trị số được hỗ trợ trong Python bởi mô-đun array.
Ghi chú: Nếu bạn muốn tạo mảng thực sự trong Python, bạn cần phải sử dụng cấu trúc dữ liệu mảng của NumPy. Để giải quyết các vấn đề toán học thì mảng NumPy sẽ hiệu quả hơn.
List và mô-đun array trong Python
Bạn có thể thao tác với list giống như mảng nhưng không thể ép kiểu phần tử được lưu trữ trong list. Ví dụ:
a= [1, 3.5, "Hello"]
Nếu bạn tạo mảng sử dụng mô-đun array, tất cả các phần tử của mảng phải có cùng kiểu số.
import array as arr
a = arr.array('d', [1, 3.5, "Hello"]) // Chạy code này sẽ báo lỗi
Làm thế nào để tạo mảng trong Python?
Từ những ví dụ trên bạn có thể đoán được, chúng ta cần nhập mô-đun array để tạo các mảng. Ví dụ:
import array as arr
a = arr.array('d',[1.1, 3.5, 4.5]) print(a)
Code trên tạo mảng có kiểu float. Chữ 'd' là mã kiểu, quyết định kiểu của mảng trong quá trình tạo. Dưới đây là những mã kiểu thường dùng:
Mã kiểu | C Type | Python Type | Kích thước tối thiểu tính theo byte |
---|---|---|---|
'b' | signed char | int | 1 |
'B' | unsigned char | int | 1 |
'u' | Py_UNICODE | Unicode character | 2 |
'h' | signed short | int | 2 |
'H' | unsigned short | int | 2 |
'i' | signed int | int | 2 |
'I' | unsigned int | int | 2 |
'l' | signed long | int | 4 |
'L' | unsigned long | int | 4 |
'f' | float | float | 4 |
'd' | double | float | 8 |
Ta sẽ không thảo luận về các kiểu dữ liệu C khác nhau trong bài này. Ta sẽ dùng mã 'i' cho số nguyên và 'd' cho số thập phân trong toàn bài.
Ghi chú: Mã code 'u' cho các ký tự Unicode không còn được chấp nhận từ phiên bản Python 3.3. Tránh sự dụng nó khi có thể.
Làm sao để truy cập vào các phần tử của mảng?
Chúng ta sử dụng index để truy cập đến các phần tử của mảng. Index cũng bắt đầu từ 0, tương tự như trong list Python.
import array as arr
a = arr.array('i', [2, 4, 6, 8])
print("Phần tử đầu tiên:", a[0])
print("Phần tử thứ 2:", a[1])
print("Phần tử cuối cùng:", a[-1])
Chạy chương trình trên ta được:
Phần tử đầu tiên: 2
Phần tử thứ 2: 4
Phần tử cuối cùng: 8
Bạn có thể truy cập vào một dải phần tử trong mảng, sử dụng toán tử cắt lát :.
import array as arr
numbers_list = [5, 85, 65, 15, 95, 52, 36, 25]
numbers_array = arr.array('i', numbers_list)
print(numbers_array[2:5]) # Phần tử thứ 3 đến 5
print(numbers_array[:-5]) # Phần tử đầu tiên đến 4
print(numbers_array[5:]) # Phần tử thứ 6 đến hết
print(numbers_array[:]) # Phần tử đầu tiên đến cuối cùng
Khi bạn chạy code trên sẽ nhận được output là:
array('i', [65, 15, 95])
array('i', [5, 85, 65])
array('i', [52, 36, 25])
array('i', [5, 85, 65, 15, 95, 52, 36, 25])
Thay đổi, thêm phần tử trong mảng Python
Mảng có thể thay đổi, các phần tử của nó có thể thay đổi theo cách tương tự như list.
import array as arr
numbers = arr.array('i', [1, 1, 2, 5, 7, 9])
# thay đổi phần tử đầu tiên
numbers[0] = 0
print(numbers)
# Output: array('i', [0, 1, 2, 5, 7, 9])
# thay phần tử thứ 3 đến thứ 5
numbers[2:5] = arr.array('i', [4, 6, 8])
print(numbers)
# Output: array('i', [0, 1, 4, 6, 8, 9])
Bạn có thêm một mục vào list sử dụng append() hoặc thêm vài mục sử dụng extend()
:
import array as arr
numbers = arr.array('i', [3, 5, 7])
numbers.append(4)
print(numbers) # Output: array('i', [3, 5, 7, 4])
# extend() nối vào cuối mảng
numbers.extend([5, 6, 7])
print(numbers) # Output: array('i', [3, 5, 7, 4, 5, 6, 7])
2 mảng cũng có thể nối lại thành một nhờ toán tử +:
import array as arr
mang_le = arr.array('i', [3, 5, 7])
mang_chan = arr.array('i', [2, 6, 8])
numbers = arr.array('i') # tạo mảng trống
numbers = mang_le + mang_chan
# Code by quantrimang.com
print(numbers)
# Output: array('i', [3, 5, 7, 2, 6, 8])
Xóa phần tử của mảng trong Python
Để xóa một hoặc nhiều phần tử của mảng ta sử dụng lệnh del.
import array as arr
number = arr.array('i', [1, 3, 3, 5, 7])
del number[2] # xóa phần tử thứ 3
print(number) # Output: array('i', [1, 3, 5, 7])
del number # xóa toàn bộ mảng
print(number) # Error: array 'number' is not defined
Có thể sử dụng remove() để xóa mục đã cho hoặc pop() để xóa mục với index cho trước:
import array as arr
numbers = arr.array('i', [1, 1, 3, 5, 9])
numbers.remove(1)
print(numbers) # Output: array('i', [1, 3, 5, 9])
print(numbers.pop(2)) # Output: 12
print(numbers) # Output: array('i', [1, 3, 9])
Độ phức tạp khi loại bỏ array trong Python
Trong mảng của Python, bạn có nhiều cách để in toàn bộ mảng với tất cả các nhân tố, thế nhưng để in một phạm vi nhân tố cụ thể từ mảng, bạn cần dùng toán tử Slice. Toán tử slice được thực hiện trên mảng cùng với dấu hai chấm (:). Để in các nhân tố ngay từ đầu tới mảng dùng [:Index], để in các nhân tố ở cuối dùng [:-Index], để in các nhân tố từ index cụ thể cho tới cuối dùng [Index:], để in các nhân tố trong một phạm vi, dùng [Start Index:End Index] và để in toàn bộ danh sách bằng toán tử slice, dùng [:]. Ngoài ra, để in toàn bộ mảng theo thứ tự đảo ngược, hãy sử dụng [::-1].
Ví dụ:
# Ví dụ chứng minh độ phức tạp khi xóa phần tử trong mảng
# Chia tách phần tử trong mảng
# Nhập mô đun mảng
import array as arr
# Tạo danh sách
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = arr.array('i', l)
print("Initial Array: ")
for i in (a):
print(i, end=" ")
# In các nhân tố của một mảng
# Dùng toán tử Slice
Sliced_array = a[3:8]
print("\nSlicing elements in a range 3-8: ")
print(Sliced_array)
# In các nhân tố từ điểm xác định trước tới cuối
Sliced_array = a[5:]
print("\nElements sliced from 5th "
"element till the end: ")
print(Sliced_array)
# In các nhân tố từ điểm bắt đầu tới cuối
Sliced_array = a[:]
print("\nPrinting all elements using slice operation: ")
print(Sliced_array)
Kết quả:
Mảng ban đầu:
1 2 3 4 5 6 7 8 9 10
Tách các nhân tố trong mảng 3-8:
array('i', [4, 5, 6, 7, 8])
Tách nhân tố trong mảng từ thứ 5 tới cuối:
array('i', [6, 7, 8, 9, 10])
In tất cả các nhân tố bằng toán tử slice:
array('i', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Lặp các thành phần trong mảng
Bạn có thể dùng vòng lặp for in
qua tất cả các thành phần của một mảng. Ví dụ:
In từng mục trong mảng cars:
for x in cars:
print(x)
Các phương thức mảng trong Python
Python có sẵn một bộ các phương thức cho bạn dùng trên lists/arrays (danh sách/mảng).
Phương thức | Mô tả |
Thêm một phần tử vào cuối danh sách | |
Xóa tất cả phần tử khỏi danh sách | |
Trả về một bản sao danh sách | |
Trả về số của các thành phần với giá trị cụ thể | |
Thêm các phần tử vào danh sách (hoặc có thể lặp lại bất kỳ) vào cuối danh sách hiện tại | |
Trả về chỉ mục của phần tử đầu tiên với giá trị cụ thể | |
Thêm một phần tử vào vị trí cụ thể | |
Loại bỏ phần tử ở vị trí nhất định | |
Loại bỏ mục đầu tiên với giá trị cụ thể | |
Đảo ngược thứ tự của danh sách | |
Phân loại danh sách |
Lưu ý: Python không có sẵn hỗ trợ cho các mảng (array), thay vào đó, bạn có thể dùng Python Lists.
Khi nào thì sử dụng mảng?
List linh hoạt hơn mảng, chúng có thể lưu trữ phần tử với nhiều kiểu dữ liệu khác nhau, bao gồm cả chuỗi. List cũng nhanh hơn mảng, vậy thì tại sao lại cần dùng mảng? Nếu bạn phải thực hiện những phép tính toán toán học trên mảng và ma trận, bạn nên sử dụng thư viện NumPy. Trừ khi thực sự cần đến mảng (mô-đun mảng có thể cần để giao tiếp với các code C), nếu không đừng sử dụng chúng.

Bạn nên đọc
