Mảng trong Python
Mảng trong Python là gì? Cách dùng mảng Python như thế nào? Hãy cùng Quantrimang.com tìm hiểu nhé!
Tạo mảng trong Python là một tập hợp mục được lưu trữ tại các vị trí bộ nhớ liền kề. Ý tưởng ở đây là lưu trữ nhiều mục cùng loại với nhau. Hành động này hỗ trợ người dùng tính toán vị trí của từng phần tử dễ dàng hơn bằng cách thêm một giá trị bù vào giá trị cơ sở, tức là vị trí bộ nhớ của phần tử đầu tiên trong mảng (thường được biểu thị bằng tên của mảng).
Hiểu đơn giản, bạn có thể tưởng tượng mảng trong Python là một dãy cầu thang nơi mà mỗi bậc được đặt một giá trị. Tại đây, bạn có thể xác định vị trí của bất kỳ người bạn bằng cách đếm số bậc chứa giá trị. Mảng có thể được mô đun tên array xử lý trong Python. Chúng có thể hữu ích khi bạn chỉ phải xử lý một giá trị kiểu dữ liệu. Một người dùng có thể xem list là mảng. Tuy nhiên, họ không thể giới hạn kiểu thành phần được lưu trong danh sách. Nếu tạo mảng bằng mô đun array, toàn bộ thành phần của mảng phải thuộc cùng một kiểu.
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.
So sánh Lists và Arrays trong Python
Trong Python, bạn có thể xem list là mảng. Tuy nhiên, bạn không thể hạn chế kiểu phần tử được lưu trong một list. Ví dụ:
# phần tử của các kiểu khác nhau
a = [1, 3.5, "Hello"]
Nếu tạo mảng bằng mô đun array, toàn bộ phần tử của mảng phải có cùng kiểu số.
import array as arr
# Error
a = arr.array('d', [1, 3.5, "Hello"])
Kết quả:
Traceback (most recent call last):
File "<string>", line 3, in <module>
a = arr.array('d', [1, 3.5, "Hello"])
TypeError: must be real number, not str
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.
Vậy các trường hợp dùng mảng được tạo từ mô đun mảng Python là gì?
Kiểu array.array
chỉ là một wrapper nhỏ trên mảng C mà cung cấp khả năng lưu trữ hiệu quả về không gian của kiểu dữ liệu loại C. Nếu cần phân bổ một mảng mà bạn biết là sẽ không đổi thì các mảng có thể chạy nhanh hơn và dùng ít bộ nhớ hơn list.
Trừ khi không thực sự cần mảng (có thể cần mô đun mảng để can thiệp vào code C), sử dụng mô đun mảng ở đây không cần thiết.
Bạn nên đọc
-
Lập trình công cụ phát hiện khuôn mặt bằng Python
-
Hàm complex() trong Python
-
Hàm bin() trong Python
-
Code Python trên trình duyệt với các trình thông dịch Python trực tuyến miễn phí này
-
Hàm bytes trong Python
-
Vòng lặp for trong Python
-
6 lý do vì sao Python sẽ trở thành ngôn ngữ lập trình của tương lai
-
Hàm ascii() trong Python
-
Cách cài đặt Python trên Windows, macOS, Linux
Cũ vẫn chất
-
Những cụm từ hot trend 2024 trên mạng xã hội
Hôm qua 2 -
Những bài thơ về Mẹ hay và ý nghĩa chạm tới trái tim người đọc
Hôm qua 2 -
Vòng lặp for trong Python
Hôm qua -
Hướng dẫn sao lưu tin nhắn Zalo và khôi phục trên iPhone
Hôm qua -
Code Will of Hashira mới nhất
Hôm qua -
Những tấm gương điển hình của tinh thần vượt lên số phận
Hôm qua -
Cách khóa trang cá nhân Facebook không cho người lạ xem
Hôm qua 2 -
90+ phím tắt Google Docs cho Windows và Mac
Hôm qua -
Cách tạo khung viền trang bìa trong Word
Hôm qua -
Công ty màn hình Trung Quốc xin Apple tha thứ sau sự cố gian lận thông số
Hôm qua