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ú |
|---|---|---|---|---|
|
ký tự đã ký |
int |
1 |
|
|
ký tự không dấu |
int |
1 |
|
|
wchar_t |
Ký tự Unicode |
2 |
(1) |
|
Py_UCS4 |
Ký tự Unicode |
4 |
(2) |
|
ký ngắn |
int |
2 |
|
|
ngắn không dấu |
int |
2 |
|
|
int đã ký |
int |
2 |
|
|
int không dấu |
int |
2 |
|
|
ký dài |
int |
4 |
|
|
dài không dấu |
int |
4 |
|
|
ký dài dài |
int |
8 |
|
|
không dấu dài dài |
int |
8 |
|
|
phao |
phao |
4 |
|
|
gấp đôi |
phao |
8 |
Ghi chú:
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ụngwchar_tlàm loại C thay vìPy_UNICODEkhô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_UNICODElà bí danh củawchar_tkể 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'.Added in version 3.13.
Xem thêm
Các mô-đun ctypes và struct, 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
byteshoặcbytearray, 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
byteshoặcbytearray, bộ khởi tạo sẽ được chuyển tới phương thứcfrombytes()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ứcfromunicode(); 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ứcextend()để 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ácioctl()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,
TypeErrorsẽ đượ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ànhfrombytes()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,
EOFErrorsẽ đượ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ìValueErrorsẽ được nâng lên. Sử dụngarray.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 start và stop có thể được chỉ định để tìm kiếm value trong phần phụ của mảng. Tăng
ValueErrornếu không tìm thấy value.Thay đổi trong phiên bản 3.10: Đã thêm các tham số start và stop 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ànhtobytes()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ìValueErrorsẽ được nâng lên. Sử dụngarray.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 là '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 inf và nan 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])