array --- Mảng giá trị số hiệu quả


Mô-đun này xác định một loại đối tượng có thể biểu diễn ngắn gọn một mảng các giá trị cơ bản: ký tự, số nguyên, số dấu phẩy động. Mảng là các loại sequence có thể thay đổi và hoạt động rất giống các danh sách, ngoại trừ loại đối tượng được lưu trữ trong chúng bị hạn chế. Loại được chỉ định tại thời điểm tạo đối tượng bằng cách sử dụng type code, là một ký tự đơn. Các mã loại sau đây được xác định:

Mã loại

Loại C

Loại Python

Kích thước tối thiểu tính bằng byte

Ghi chú

'b'

ký tự đã ký

int

1

'B'

ký tự không dấu

int

1

'u'

wchar_t

Ký tự Unicode

2

(1)

'w'

Py_UCS4

Ký tự Unicode

4

(2)

'h'

ký ngắn

int

2

'H'

ngắn không dấu

int

2

'i'

int đã ký

int

2

'I'

int không dấu

int

2

'l'

ký dài

int

4

'L'

dài không dấu

int

4

'q'

ký dài dài

int

8

'Q'

không dấu dài dài

int

8

'f'

phao

phao

4

'd'

gấp đôi

phao

8

Ghi chú:

  1. Nó có thể là 16 bit hoặc 32 bit tùy thuộc vào nền tảng.

    Thay đổi trong phiên bản 3.9: array('u') hiện sử dụng wchar_t làm loại C thay vì Py_UNICODE không còn được dùng nữa. Thay đổi này không ảnh hưởng đến hành vi của nó vì Py_UNICODE là bí danh của wchar_t kể từ Python 3.3.

    Không được dùng nữa kể từ phiên bản 3.3, sẽ bị xóa trong phiên bản 3.16: Vui lòng chuyển sang mã kiểu 'w'.

  2. Added in version 3.13.

Xem thêm

Các mô-đun ctypesstruct, cũng như các mô-đun của bên thứ ba như numpy, sử dụng mã loại tương tự -- nhưng hơi khác một chút.

Việc biểu diễn thực tế các giá trị được xác định bởi kiến trúc máy (nói đúng ra là bằng cách triển khai C). Kích thước thực tế có thể được truy cập thông qua thuộc tính array.itemsize.

Mô-đun xác định mục sau:

array.typecodes

Một chuỗi có tất cả các mã loại có sẵn.

Mô-đun xác định loại sau:

class array.array(typecode[, initializer])

Một mảng mới có các mục bị hạn chế bởi typecode và được khởi tạo từ giá trị initializer tùy chọn, phải là đối tượng bytes hoặc bytearray, chuỗi Unicode hoặc có thể lặp qua các phần tử thuộc loại thích hợp.

Nếu được cung cấp một đối tượng bytes hoặc bytearray, bộ khởi tạo sẽ được chuyển tới phương thức frombytes() của mảng mới; nếu được cung cấp một chuỗi Unicode, trình khởi tạo sẽ được chuyển tới phương thức fromunicode(); mặt khác, trình vòng lặp của trình khởi tạo được truyền tới phương thức extend() để thêm các mục ban đầu vào mảng.

Các đối tượng mảng hỗ trợ các hoạt động mutable sequence thông thường như lập chỉ mục, cắt, nối và nhân. Khi sử dụng phép gán lát, giá trị được gán phải là một đối tượng mảng có cùng mã kiểu; trong tất cả các trường hợp khác, TypeError được nâng lên. Các đối tượng mảng cũng triển khai giao diện bộ đệm và có thể được sử dụng ở bất cứ nơi nào bytes-like objects được hỗ trợ.

Tăng một auditing event array.__new__ với các đối số typecode, initializer.

typecode

Ký tự mã kiểu được sử dụng để tạo mảng.

itemsize

Độ dài tính bằng byte của một mục mảng trong biểu diễn bên trong.

append(value, /)

Nối một mục mới với giá trị được chỉ định vào cuối mảng.

buffer_info()

Trả về một bộ (address, length) cung cấp địa chỉ bộ nhớ hiện tại và độ dài của các phần tử của bộ đệm được sử dụng để chứa nội dung của mảng. Kích thước của bộ nhớ đệm tính bằng byte có thể được tính là array.buffer_info()[1] * array.itemsize. Điều này đôi khi hữu ích khi làm việc với các giao diện I/O cấp thấp (và vốn không an toàn) yêu cầu địa chỉ bộ nhớ, chẳng hạn như các thao tác ioctl() nhất định. Các số được trả về là hợp lệ miễn là mảng tồn tại và không có thao tác thay đổi độ dài nào được áp dụng cho nó.

Ghi chú

Khi sử dụng các đối tượng mảng từ mã được viết bằng C hoặc C++ (cách duy nhất để sử dụng hiệu quả thông tin này), sẽ hợp lý hơn khi sử dụng giao diện bộ đệm được hỗ trợ bởi các đối tượng mảng. Phương pháp này được duy trì để tương thích ngược và nên tránh sử dụng trong mã mới. Giao diện bộ đệm được ghi lại bằng Giao thức đệm.

byteswap()

"Byteswap" tất cả các mục của mảng. Điều này chỉ được hỗ trợ cho các giá trị có kích thước 1, 2, 4 hoặc 8 byte; đối với các loại giá trị khác, RuntimeError được nâng lên. Nó rất hữu ích khi đọc dữ liệu từ một tệp được ghi trên máy có thứ tự byte khác.

count(value, /)

Trả về số lần xuất hiện của value trong mảng.

extend(iterable, /)

Nối các mục từ iterable vào cuối mảng. Nếu iterable là một mảng khác thì nó phải có exactly cùng mã loại; nếu không, TypeError sẽ được nâng lên. Nếu iterable không phải là một mảng thì nó phải có khả năng lặp lại được và các phần tử của nó phải đúng loại để được thêm vào mảng.

frombytes(buffer, /)

Nối các mục từ bytes-like object, diễn giải nội dung của nó dưới dạng một mảng các giá trị máy (như thể nó đã được đọc từ một tệp bằng phương pháp fromfile()).

Added in version 3.2: fromstring() được đổi tên thành frombytes() cho rõ ràng.

fromfile(f, n, /)

Đọc các mục n (dưới dạng giá trị máy) từ file object f và nối chúng vào cuối mảng. Nếu có ít hơn các mục n, EOFError sẽ được nâng lên, nhưng các mục có sẵn vẫn được chèn vào mảng.

fromlist(list, /)

Nối các mục từ danh sách. Điều này tương đương với for x in list: a.append(x) ngoại trừ việc nếu có lỗi kiểu thì mảng không thay đổi.

fromunicode(ustr, /)

Mở rộng mảng này với dữ liệu từ chuỗi Unicode đã cho. Mảng phải có mã loại 'u' hoặc 'w'; nếu không thì ValueError sẽ được nâng lên. Sử dụng array.frombytes(unicodestring.encode(enc)) để nối dữ liệu Unicode vào một mảng thuộc loại khác.

index(value[, start[, stop]])

Trả về i nhỏ nhất sao cho i là chỉ mục xuất hiện đầu tiên của value trong mảng. Các đối số tùy chọn startstop có thể được chỉ định để tìm kiếm value trong phần phụ của mảng. Tăng ValueError nếu không tìm thấy value.

Thay đổi trong phiên bản 3.10: Đã thêm các tham số startstop tùy chọn.

insert(index, value, /)

Chèn một mục mới value vào mảng trước vị trí index. Các giá trị âm được coi là tương đối so với phần cuối của mảng.

pop(index=-1, /)

Xóa mục có chỉ mục i khỏi mảng và trả về mục đó. Đối số tùy chọn mặc định là -1, do đó, theo mặc định, mục cuối cùng sẽ bị xóa và trả về.

remove(value, /)

Xóa lần xuất hiện đầu tiên của value khỏi mảng.

clear()

Loại bỏ tất cả các phần tử khỏi mảng.

Added in version 3.13.

reverse()

Đảo ngược thứ tự các phần tử trong mảng.

tobytes()

Chuyển đổi mảng thành mảng giá trị máy và trả về biểu diễn byte (cùng một chuỗi byte sẽ được ghi vào tệp bằng phương thức tofile().)

Added in version 3.2: tostring() được đổi tên thành tobytes() cho rõ ràng.

tofile(f, /)

Viết tất cả các mục (dưới dạng giá trị máy) vào file object f.

tolist()

Chuyển đổi mảng thành một danh sách thông thường có cùng mục.

tounicode()

Chuyển đổi mảng thành chuỗi Unicode. Mảng phải có loại 'u' hoặc 'w'; nếu không thì ValueError sẽ được nâng lên. Sử dụng array.tobytes().decode(enc) để lấy chuỗi Unicode từ một mảng thuộc loại khác.

Biểu diễn chuỗi của các đối tượng mảng có dạng array(typecode, initializer). initializer bị bỏ qua nếu mảng trống, nếu không thì đó là chuỗi Unicode nếu typecode'u' hoặc 'w', nếu không thì đó là danh sách các số. Việc biểu diễn chuỗi được đảm bảo có thể được chuyển đổi trở lại thành một mảng có cùng loại và giá trị bằng cách sử dụng eval(), miễn là lớp array đã được nhập bằng from array import array. Các biến infnan cũng phải được xác định nếu nó chứa các giá trị dấu phẩy động tương ứng. Ví dụ:

mảng('l')
mảng('w', 'xin chào \u2641')
mảng('l', [1, 2, 3, 4, 5])
mảng('d', [1.0, 2.0, 3.14, -inf, nan])

Xem thêm

Mô-đun struct

Đóng gói và giải nén dữ liệu nhị phân không đồng nhất.

NumPy

Gói NumPy định nghĩa một kiểu mảng khác.