Mảng trong Python: Khám phá tính năng và ứng dụng

Một trong những tính năng quan trọng của Python là khả năng sử dụng mảng. Trên đây là bài viết giới thiệu về mảng trong Python và cách sử dụng chúng. Hãy cùng tìm hiểu nhé!

Mảng trong Python

Khái niệm cơ bản về mảng

Mảng trong Python là một tập hợp các phần tử có cùng kiểu dữ liệu được lưu trữ tại các vị trí bộ nhớ liền kề. Điều này cho phép người dùng dễ dàng tính toán vị trí của từng phần tử trong mảng bằng cách sử dụng một giá trị bù. Ví dụ: vị trí 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) sẽ là giá trị cơ sở.

Hiểu đơn giản về mảng

Bạn có thể tưởng tượng mảng trong Python như một dãy bậc cầu thang, trong đó mỗi bậc chứa một giá trị. Từ đó, bạn có thể xác định vị trí của một người bạn bằng cách đếm số bậc chứa giá trị đó. Mảng có thể được mô phỏng bằng mô-đun “array” trong Python. Mặc dù danh sách (list) cũng có thể được coi như một mảng, nhưng không giới hạn kiểu dữ liệu của các phần tử được lưu trữ trong danh sách. Trái lại, khi bạn tạo mảng bằng mô-đun “array”, tất cả các phần tử trong mảng phải thuộc cùng một kiểu dữ liệu.

Hạn chế của mảng trong Python

Nếu bạn muốn tạo một mảng thực sự trong Python, bạn cần sử dụng cấu trúc dữ liệu mảng của thư viện NumPy. Mảng này sẽ hữu ích khi bạn cần giải quyết các vấn đề toán học phức tạp.

List và mô-đun array trong Python

List trong Python cho phép bạn thực hiện các thao tác tương tự như mảng, nhưng không giới hạn kiểu dữ liệu của các phần tử. Ví dụ:

a = [1, 3.5, "Xin chào"]

Nếu bạn dùng mô-đun “array” để tạo mảng, tất cả các phần tử của mảng phải có cùng kiểu số. Ví dụ:

import array as arr
a = arr.array('d', [1, 3.5, "Xin chào"]) # Dòng code này sẽ gây lỗi

Tạo và truy cập mảng trong Python

Tạo mảng trong Python

Để tạo một mảng trong Python, bạn cần nhập mô-đun “array”. Ví dụ:

import array as arr
a = arr.array('d', [1.1, 3.5, 4.5])
print(a)

Đoạn code trên tạo một mảng có kiểu dữ liệu float. Chữ ‘d’ là mã kiểu, quyết định kiểu dữ liệu của mảng trong quá trình tạo. Dưới đây là một số mã kiểu phổ biến:

  • ‘b’: kiểu số nguyên có dấu (signed char)
  • ‘B’: kiểu số nguyên không dấu (unsigned char)
  • ‘u’: ký tự Unicode trong Python 2
  • ‘h’: số nguyên có dấu (signed short)
  • ‘H’: số nguyên không dấu (unsigned short)
  • ‘i’: số nguyên có dấu (signed int)
  • ‘I’: số nguyên không dấu (unsigned int)
  • ‘l’: số nguyên dài có dấu (signed long)
  • ‘L’: số nguyên dài không dấu (unsigned long)
  • ‘f’: số thực (float)
  • ‘d’: số thực kép (double)

Trong bài viết này, chúng ta sẽ sử dụng mã ‘i’ cho số nguyên và mã ‘d’ cho số thực.

Truy cập vào các phần tử của mảng

Để truy cập vào các phần tử của mảng, chúng ta sử dụng chỉ mục (index). Chỉ mục cũng bắt đầu từ 0, tương tự như trong danh sách (list) của Python. Ví dụ:

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])

Kết quả khi chạy chương trình sẽ là:

Phần tử đầu tiên: 2
Phần tử thứ 2: 4
Phần tử cuối cùng: 8

Bạn cũng có thể truy cập vào một phạm vi phần tử trong mảng bằng cách sử dụng toán tử cắt (slice). Ví dụ:

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 chạy đoạn code trên, bạn sẽ nhận được kết quả 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 và thêm phần tử vào mảng Python

Mảng có thể thay đổi và phần tử của nó cũng có thể thay đổi tương tự như danh sách (list). Ví dụ:

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) # Kết quả: array('i', [0, 1, 2, 5, 7, 9])

# Thay đổi phần tử từ thứ 3 đến thứ 5
numbers[2:5] = arr.array('i', [4, 6, 8])
print(numbers) # Kết quả: array('i', [0, 1, 4, 6, 8, 9])

# Thêm một phần tử vào cuối mảng
numbers.append(4)
print(numbers) # Kết quả: array('i', [0, 1, 4, 6, 8, 9, 4])

# Thêm một số phần tử vào cuối mảng
numbers.extend([5, 6, 7])
print(numbers) # Kết quả: array('i', [0, 1, 4, 6, 8, 9, 4, 5, 6, 7])

# Nối hai mảng lại với nhau
mang_le = arr.array('i', [3, 5, 7])
mang_chan = arr.array('i', [2, 6, 8])
numbers = arr.array('i')
numbers = mang_le + mang_chan
print(numbers) # Kết quả: array('i', [3, 5, 7, 2, 6, 8])

Xóa phần tử trong mảng Python

Để xóa một hoặc nhiều phần tử trong mảng, chúng ta sử dụng lệnh “del”. Ví dụ:

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) # Kết quả: array('i', [1, 3, 5, 7])

del number # Xóa toàn bộ mảng
print(number) # Lỗi: mảng 'number' chưa được định nghĩa

# Bạn cũng có thể dùng phương thức "remove()" để xóa một phần tử cụ thể
# Hoặc dùng phương thức "pop()" để xóa phần tử với chỉ mục cho trước
import array as arr
numbers = arr.array('i', [1, 1, 3, 5, 9])
numbers.remove(1)
print(numbers) # Kết quả: array('i', [1, 3, 5, 9])
print(numbers.pop(2)) # Kết quả: 12
print(numbers) # Kết quả: array('i', [1, 3, 9])

Lặp qua các phần tử trong mảng

Để lặp qua tất cả các phần tử của một mảng, chúng ta có thể sử dụng vòng lặp “for … in”. Ví dụ: In từng phần tử trong mảng “cars”.

for x in cars:
    print(x)

Các phương thức của mảng trong Python

Python cung cấp một số phương thức dành riêng cho danh sách và mảng (array). Dưới đây là một số phương thức phổ biến:

  • append(): thêm một phần tử vào cuối danh sách
  • clear(): xóa tất cả phần tử khỏi danh sách
  • copy(): tạo một bản sao của danh sách
  • count(): đếm số lượng phần tử có giá trị cụ thể
  • extend(): thêm các phần tử vào danh sách (hoặc danh sách lặp lại) vào cuối danh sách hiện tại
  • index(): trả về chỉ mục của phần tử đầu tiên có giá trị cụ thể
  • insert(): thêm một phần tử vào vị trí cụ thể
  • pop(): loại bỏ phần tử tại vị trí nhất định
  • remove(): loại bỏ phần tử đầu tiên có giá trị cụ thể
  • reverse(): đảo ngược thứ tự của danh sách
  • sort(): sắp xếp danh sách

Lưu ý: Python không hỗ trợ trực tiếp mảng, thay vào đó chỉ hỗ trợ danh sách (list).

So sánh danh sách và mảng trong Python

Danh sách (list) trong Python linh hoạt hơn mảng và có thể chứa các phần tử với nhiều kiểu dữ liệu khác nhau, bao gồm cả chuỗi (string). Danh sách cũng cung cấp tốc độ truy cập nhanh hơn so với mảng. Vậy tại sao chúng ta cần sử dụng mảng? Nếu bạn cần thực hiện các 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 khi nào thì sử dụng mảng từ mô-đun array trong Python? Mảng sử dụng mô-đun “array” chỉ là một bọc nhỏ trên mảng C, giúp tiết kiệm không gian lưu trữ cho kiểu dữ liệu loại C. Nếu bạn cần phân bổ một mảng mà bạn biết rằng nó sẽ không thay đổi, mảng có thể chạy nhanh hơn và tiết kiệm bộ nhớ hơn danh sách.

Tuy nhiên, trừ khi bạn thực sự cần sử dụng mảng (ví dụ: khi cần can thiệp vào code C), sử dụng mô-đun “array” không cần thiết.

Hy vọng rằng bài viết này đã giúp bạn hiểu rõ hơn về mảng trong Python và cách sử dụng chúng trong các ứng dụng thực tế. Hãy thử tạo và thao tác với mảng trong Python để nắm vững kiến thức này. Chúc bạn thành công!