Mảng 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:

Phn t đầu tiên: 2
Phn t th 2: 4
Phn t cui 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])

Bạn có thể tìm hiểu thêm về các phương thức của mảng Python tại đây.

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 rê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.