Posted in

Giới thiệu về Array trong Python và cách truy cập phần tử của Array

Array in python
Array in python

Trong hành trình học lập trình Python, một trong những khái niệm mình sớm gặp chính là array (mảng). Đây là cấu trúc dữ liệu cơ bản nhưng có vai trò cực kỳ quan trọng khi cần lưu trữ và xử lý nhiều giá trị cùng kiểu. So với list, array trong Python ít linh hoạt hơn, nhưng đổi lại nó tiết kiệm bộ nhớ và mang lại hiệu suất cao hơn trong nhiều trường hợp.

Trong bài viết này, mình sẽ cùng bạn tìm hiểu từ những khái niệm nền tảng về array trong Python, cách khai báo, khởi tạo, đến các phương pháp truy cập phần tử trong array như indexing, slicing hay dùng vòng lặp. Đây là những kiến thức cần thiết nếu bạn muốn xử lý dữ liệu số lượng lớn, làm việc hiệu quả và chuyên nghiệp hơn với Python.

1. Array trong Python là gì?

1.1 Khái niệm cơ bản

Array trong Python là một cấu trúc dữ liệu lưu trữ nhiều phần tử, trong đó tất cả phần tử phải cùng kiểu dữ liệu. Điều này giúp array khác biệt so với list, nơi ta có thể kết hợp nhiều kiểu dữ liệu khác nhau.

Ví dụ đơn giản: nếu bạn tạo một array kiểu số nguyên, thì toàn bộ phần tử trong array đó phải là số nguyên.

from array import array  

# Create an array of integers
numbers = array('i', [10, 20, 30, 40, 50])  

print(numbers)  
# Output: array('i', [10, 20, 30, 40, 50])

Trong đoạn code trên:

  • array được import từ thư viện chuẩn array.
  • 'i' là typecode thể hiện kiểu dữ liệu integer.
  • Các phần tử [10, 20, 30, 40, 50] đều là số nguyên.

1.2 Khác biệt giữa Array và List

Nhiều bạn mới học thường nhầm lẫn giữa array và list. Mình sẽ tóm tắt vài điểm chính:

  • List:
    • Có thể chứa nhiều loại dữ liệu khác nhau (số, chuỗi, float, object).
    • Linh hoạt, dễ dùng, phổ biến hơn trong các chương trình Python.
  • Array:
    • Chỉ chứa dữ liệu cùng kiểu.
    • Tốn ít bộ nhớ hơn.
    • Hiệu quả hơn khi xử lý lượng lớn dữ liệu đồng nhất, đặc biệt với dữ liệu số.

Ví dụ so sánh:

# List containing mixed data types
mixed_list = [10, "hello", 3.14]  

# Array containing only integers
from array import array  
int_array = array('i', [1, 2, 3])

Như vậy, nếu mục tiêu của bạn là linh hoạt và dễ dùng, hãy chọn list. Nhưng nếu muốn tối ưu hiệu năng với dữ liệu lớn, array là lựa chọn hợp lý.

2. Cách khai báo và khởi tạo Array

2.1 Cú pháp

Trong Python, array được khai báo theo cú pháp:

array(typecode, [initial_elements])

Trong đó:

  • typecode: ký hiệu mô tả kiểu dữ liệu. Ví dụ 'i' cho integer, 'f' cho float.
  • initial_elements: danh sách phần tử ban đầu.

2.2 Ví dụ minh họa

Cùng xem vài ví dụ cụ thể để hình dung rõ hơn:

from array import array  

# Array of integers
arr_integers = array('i', [1, 2, 3, 4, 5])  

# Array of floats
arr_floats = array('f', [1.1, 2.2, 3.3])  

print(arr_integers)  
# Output: array('i', [1, 2, 3, 4, 5])  

print(arr_floats)  
# Output: array('f', [1.100000023841858, 2.200000047683716, 3.299999952316284])

Ở ví dụ trên, có thể thấy array của float hiển thị chi tiết đến từng số thập phân nhỏ. Điều này là do cơ chế lưu trữ nhị phân của kiểu dữ liệu float trong máy tính.

3. Truy cập phần tử trong Array

Đây là nội dung quan trọng nhất trong bài. Array trong Python hỗ trợ các cách truy cập tương tự list, bao gồm indexing, slicingvòng lặp.

3.1 Truy cập bằng chỉ số (Indexing)

  • Chỉ số bắt đầu từ 0.
  • Ngoài ra, có thể truy cập từ cuối array bằng chỉ số âm.

Ví dụ:

from array import array  

numbers = array('i', [10, 20, 30, 40, 50])  

# Access first element
print(numbers[0])  # Output: 10  

# Access third element
print(numbers[2])  # Output: 30  

# Access last element using negative index
print(numbers[-1])  # Output: 50

Cách này thường dùng khi bạn biết chính xác vị trí phần tử trong array.

3.2 Truy cập bằng cắt lát (Slicing)

Khi cần lấy nhiều phần tử liên tiếp, ta dùng cú pháp slicing:

array[start:end:step]

Trong đó:

  • start: vị trí bắt đầu (mặc định = 0).
  • end: vị trí kết thúc (không bao gồm end).
  • step: bước nhảy (mặc định = 1).

Ví dụ:

# Array of integers
numbers = array('i', [10, 20, 30, 40, 50])  

# Access elements from index 1 to 3
print(numbers[1:4])  
# Output: array('i', [20, 30, 40])  

# Access every second element
print(numbers[::2])  
# Output: array('i', [10, 30, 50])  

# Reverse array
print(numbers[::-1])  
# Output: array('i', [50, 40, 30, 20, 10])

Slicing rất tiện lợi khi cần thao tác trên một đoạn dữ liệu liên tiếp, hoặc xử lý theo bước nhảy nhất định.

3.3 Vòng lặp để truy cập phần tử

Ngoài indexing và slicing, mình còn có thể dùng vòng lặp để duyệt qua từng phần tử:

# Iterate through array elements
for num in numbers:  
    print(num)  

Hoặc dùng vòng lặp với chỉ số:

for i in range(len(numbers)):  
    print(f"Index {i}: {numbers[i]}")

Cách này rất hữu ích khi bạn cần xử lý từng phần tử theo vị trí.

4. Thay đổi giá trị phần tử trong Array

Array trong Python cho phép thay đổi phần tử tại một vị trí cụ thể bằng cách gán trực tiếp:

numbers = array('i', [10, 20, 30, 40, 50])  

# Change value at index 2
numbers[2] = 100  
print(numbers)  
# Output: array('i', [10, 20, 100, 40, 50])

Ngoài ra, array cũng hỗ trợ thay đổi nhiều giá trị cùng lúc bằng slicing:

# Replace values from index 1 to 2
numbers[1:3] = array('i', [200, 300])  
print(numbers)  
# Output: array('i', [10, 200, 300, 40, 50])

Điều này cho phép ta linh hoạt cập nhật một phần hoặc toàn bộ array theo nhu cầu.

5. So sánh hiệu năng giữa Array và List

Trong nhiều tình huống, list được sử dụng nhiều hơn vì tính linh hoạt. Nhưng nếu so sánh hiệu năng, array có ưu thế khi xử lý dữ liệu lớn và đồng nhất.

Ví dụ: khi lưu trữ hàng triệu số nguyên, array sẽ:

  • Chiếm ít bộ nhớ hơn.
  • Truy cập và xử lý nhanh hơn.

Tuy nhiên, array không thể lưu dữ liệu hỗn hợp (mixed type). Vì vậy, lựa chọn giữa array và list phụ thuộc vào mục đích: nếu cần linh hoạt thì dùng list, nếu cần hiệu năng và đồng nhất thì chọn array.

6. Khi nào nên dùng Array thay vì List?

Mình thường chọn array thay cho list trong các tình huống sau:

  • Khi dữ liệu cần lưu trữ có cùng kiểu (ví dụ chỉ toàn số nguyên hoặc số thực).
  • Khi hiệu năng xử lý và tiết kiệm bộ nhớ là ưu tiên hàng đầu.
  • Khi làm việc với khối lượng lớn dữ liệu số, đặc biệt là trong tính toán khoa học hoặc xử lý dữ liệu dạng ma trận.

Ở mức cao hơn, nếu bạn cần xử lý toán học phức tạp với dữ liệu số, hãy cân nhắc dùng NumPy arrays. Đây là công cụ mạnh mẽ hơn nhiều so với array chuẩn, được tối ưu hóa cho các phép toán vector và ma trận.

7. Kết luận

Trong bài viết này, mình đã giới thiệu chi tiết về array trong Python và cách truy cập phần tử của array. Chúng ta đã cùng nhau đi qua các khái niệm cơ bản, sự khác biệt giữa array và list, cú pháp khai báo, các phương thức truy cập phần tử như indexing, slicing, vòng lặp, cũng như cách thay đổi giá trị phần tử.

Array tuy không phổ biến bằng list trong các ứng dụng thường ngày của Python, nhưng trong những bài toán cần tối ưu bộ nhớ và tốc độ, nó tỏ ra cực kỳ hữu ích. Nếu bạn muốn trở thành một lập trình viên Python chuyên nghiệp, hãy luyện tập sử dụng array và hiểu rõ ưu điểm, hạn chế của nó.

8. Tài liệu tham khảo

  1. Python Software Foundation. Python Standard Library: array. Truy cập tại: https://docs.python.org/3/library/array.html
  2. W3Schools. Python Arrays. Truy cập tại: https://www.w3schools.com/python/python_arrays.asp
  3. GeeksforGeeks. Arrays in Python. Truy cập tại: https://www.geeksforgeeks.org/arrays-in-python/

Leave a Reply

Your email address will not be published. Required fields are marked *