Thông tin liên hệ
- 036.686.3943
- admin@nguoicodonvn2008.info
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.
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
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ể.
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])
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 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])
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])
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)
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.
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
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.
Nguồn tin: Quantrimang.com
Ý kiến bạn đọc
Những tin mới hơn
Những tin cũ hơn