Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Array - Mảng số hiệu quả (Efficient arrays of numeric values) trong Python


Array là cấu trúc dữ liệu rất phổ biến trong C/C++, Java, v.v. Trong các ngôn ngữ này, array được định nghĩa là tập hợp của nhiều hơn một phần tử cùng kiểu dữ liệu. Python không có bất kỳ built-in nào tương đương với array. List cũng như Tuple của nó là tập hợp các phần tử nhưng chúng có thể khác kiểu.

Module array của Python mô phỏng array kiểu C. Module định nghĩa lớp 'array'. Constructor sau tạo đối tượng array:

array(typecode, initializer)

Đối số typecode xác định kiểu của array. Initializer nên là chuỗi (sequence) với tất cả phần tử khớp kiểu.

Câu lệnh sau tạo đối tượng array nguyên:

>>> import array
>>> arr = array.array('i', range(5))
>>> arr
array('i', [0, 1, 2, 3, 4])
>>> type(arr)

>>> array.typecodes
'bBuhHiIlLqQfd'

Module array định nghĩa thuộc tính typecodes trả về chuỗi. Mỗi ký tự trong chuỗi đại diện cho type code chỉ ra kiểu C và kiểu Python tương đương:

Type code C Type Python Type
'b' signed char int
'B' unsigned char int
'u' Py_UNICODE Unicode character
'h' signed short int
'H' unsigned short int
'i' signed int int
'I' unsigned int int
'l' signed long int
'L' unsigned long int
'q' signed long long int
'Q' unsigned long long int
'f' float float
'd' double float

Đối số initializer có thể là đối tượng byte-like. Ví dụ sau xây dựng array từ biểu diễn byte của chuỗi.

>>> arr1 = array.array('b', b'Hello')
>>> arr1
array('b', [72, 101, 108, 108, 111])

Lớp array định nghĩa các phương thức sau:

array.buffer_info()

Phương thức này trả về tuple (address, length) cho địa chỉ bộ nhớ hiện tại và độ dài tính bằng phần tử của buffer dùng để giữ nội dung array.

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr.buffer_info()
(2201141755144, 5)

count()

Phương thức này trả về số lần xuất hiện của phần tử xác định trong array.

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr.count(2)
1

extend()

Phương thức này thêm các mục từ iterable vào cuối array hoặc iterable phải có chính xác cùng type code; nếu không, TypeError sẽ bị ném ra.

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr1 = array.array('i', [10, 20, 30])
>>> arr.extend(arr1)
>>> arr
array('i', [0, 1, 2, 3, 4, 10, 20, 30])

fromfile()

Phương thức này đọc n mục (như giá trị máy) từ đối tượng file và thêm vào array.

Trong ví dụ sau, chúng ta trước mở file ở chế độ ghi binary.

>>> file = open('test.txt', 'wb')
>>> file.write(b'Hello Python')
12
>>> file.close()

Chúng ta giờ dùng file này để thêm dữ liệu của nó vào đối tượng array.

>>> a = array.array('i')
>>> file = open('test.txt', 'rb')
>>> a.fromfile(file, file.tell())
>>> a
array('i', [1819043144, 2035294319, 1852794996])

append()

Phương thức này thêm mục mới vào cuối array.

fromlist()

Phương thức này thêm các mục từ list vào array. Điều này tương đương với for x in list: a.append(x).

>>> a = array.array('i')
>>> a.append(10)
>>> a
array('i', [10])
>>> num = [20, 30, 40, 50]
>>> a.fromlist(num)
>>> a
array('i', [10, 20, 30, 40, 50])

insert()

Chèn mục mới vào array trước vị trí xác định.

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> a.insert(2, 25)
>>> a
array('i', [10, 20, 25, 30, 40, 50])

pop()

Phương thức này trả về mục tại chỉ số cho trước sau khi xóa nó khỏi array.

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> x = a.pop(2)
>>> x
30
>>> a
array('i', [10, 20, 40, 50])

remove()

Phương thức này xóa lần xuất hiện đầu tiên của mục cho trước khỏi array.

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> a.remove(30)
>>> a
array('i', [10, 20, 40, 50])

tofile()

Phương thức này ghi tất cả các mục vào đối tượng file có quyền ghi bật.

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> file = open("test.txt", "wb")
>>> a.tofile(file)
>>> file.close()
>>> file = open("test.txt", "rb")
>>> file.read()
b'\n\x00\x00\x00\x14\x00\x00\x00\x1e\x00\x00\x00(\x00\x00\x002\x00\x00\x00'