17db96d56Sopenharmony_ci:mod:`array` --- Efficient arrays of numeric values 27db96d56Sopenharmony_ci=================================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: array 57db96d56Sopenharmony_ci :synopsis: Space efficient arrays of uniformly typed numeric values. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. index:: single: arrays 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci-------------- 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ciThis module defines an object type which can compactly represent an array of 127db96d56Sopenharmony_cibasic values: characters, integers, floating point numbers. Arrays are sequence 137db96d56Sopenharmony_citypes and behave very much like lists, except that the type of objects stored in 147db96d56Sopenharmony_cithem is constrained. The type is specified at object creation time by using a 157db96d56Sopenharmony_ci:dfn:`type code`, which is a single character. The following type codes are 167db96d56Sopenharmony_cidefined: 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 197db96d56Sopenharmony_ci| Type code | C Type | Python Type | Minimum size in bytes | Notes | 207db96d56Sopenharmony_ci+===========+====================+===================+=======================+=======+ 217db96d56Sopenharmony_ci| ``'b'`` | signed char | int | 1 | | 227db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 237db96d56Sopenharmony_ci| ``'B'`` | unsigned char | int | 1 | | 247db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 257db96d56Sopenharmony_ci| ``'u'`` | wchar_t | Unicode character | 2 | \(1) | 267db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 277db96d56Sopenharmony_ci| ``'h'`` | signed short | int | 2 | | 287db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 297db96d56Sopenharmony_ci| ``'H'`` | unsigned short | int | 2 | | 307db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 317db96d56Sopenharmony_ci| ``'i'`` | signed int | int | 2 | | 327db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 337db96d56Sopenharmony_ci| ``'I'`` | unsigned int | int | 2 | | 347db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 357db96d56Sopenharmony_ci| ``'l'`` | signed long | int | 4 | | 367db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 377db96d56Sopenharmony_ci| ``'L'`` | unsigned long | int | 4 | | 387db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 397db96d56Sopenharmony_ci| ``'q'`` | signed long long | int | 8 | | 407db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 417db96d56Sopenharmony_ci| ``'Q'`` | unsigned long long | int | 8 | | 427db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 437db96d56Sopenharmony_ci| ``'f'`` | float | float | 4 | | 447db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 457db96d56Sopenharmony_ci| ``'d'`` | double | float | 8 | | 467db96d56Sopenharmony_ci+-----------+--------------------+-------------------+-----------------------+-------+ 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ciNotes: 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci(1) 517db96d56Sopenharmony_ci It can be 16 bits or 32 bits depending on the platform. 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci .. versionchanged:: 3.9 547db96d56Sopenharmony_ci ``array('u')`` now uses ``wchar_t`` as C type instead of deprecated 557db96d56Sopenharmony_ci ``Py_UNICODE``. This change doesn't affect its behavior because 567db96d56Sopenharmony_ci ``Py_UNICODE`` is alias of ``wchar_t`` since Python 3.3. 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci .. deprecated-removed:: 3.3 4.0 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ciThe actual representation of values is determined by the machine architecture 627db96d56Sopenharmony_ci(strictly speaking, by the C implementation). The actual size can be accessed 637db96d56Sopenharmony_cithrough the :attr:`array.itemsize` attribute. 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ciThe module defines the following item: 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci.. data:: typecodes 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci A string with all available type codes. 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ciThe module defines the following type: 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci.. class:: array(typecode[, initializer]) 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci A new array whose items are restricted by *typecode*, and initialized 797db96d56Sopenharmony_ci from the optional *initializer* value, which must be a list, a 807db96d56Sopenharmony_ci :term:`bytes-like object`, or iterable over elements of the 817db96d56Sopenharmony_ci appropriate type. 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci If given a list or string, the initializer is passed to the new array's 847db96d56Sopenharmony_ci :meth:`fromlist`, :meth:`frombytes`, or :meth:`fromunicode` method (see below) 857db96d56Sopenharmony_ci to add initial items to the array. Otherwise, the iterable initializer is 867db96d56Sopenharmony_ci passed to the :meth:`extend` method. 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci Array objects support the ordinary sequence operations of indexing, slicing, 897db96d56Sopenharmony_ci concatenation, and multiplication. When using slice assignment, the assigned 907db96d56Sopenharmony_ci value must be an array object with the same type code; in all other cases, 917db96d56Sopenharmony_ci :exc:`TypeError` is raised. Array objects also implement the buffer interface, 927db96d56Sopenharmony_ci and may be used wherever :term:`bytes-like objects <bytes-like object>` are supported. 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci .. audit-event:: array.__new__ typecode,initializer array.array 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci .. attribute:: typecode 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci The typecode character used to create the array. 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci .. attribute:: itemsize 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_ci The length in bytes of one array item in the internal representation. 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci .. method:: append(x) 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci Append a new item with value *x* to the end of the array. 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci .. method:: buffer_info() 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci Return a tuple ``(address, length)`` giving the current memory address and the 1157db96d56Sopenharmony_ci length in elements of the buffer used to hold array's contents. The size of the 1167db96d56Sopenharmony_ci memory buffer in bytes can be computed as ``array.buffer_info()[1] * 1177db96d56Sopenharmony_ci array.itemsize``. This is occasionally useful when working with low-level (and 1187db96d56Sopenharmony_ci inherently unsafe) I/O interfaces that require memory addresses, such as certain 1197db96d56Sopenharmony_ci :c:func:`!ioctl` operations. The returned numbers are valid as long as the array 1207db96d56Sopenharmony_ci exists and no length-changing operations are applied to it. 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci .. note:: 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci When using array objects from code written in C or C++ (the only way to 1257db96d56Sopenharmony_ci effectively make use of this information), it makes more sense to use the buffer 1267db96d56Sopenharmony_ci interface supported by array objects. This method is maintained for backward 1277db96d56Sopenharmony_ci compatibility and should be avoided in new code. The buffer interface is 1287db96d56Sopenharmony_ci documented in :ref:`bufferobjects`. 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci .. method:: byteswap() 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_ci "Byteswap" all items of the array. This is only supported for values which are 1347db96d56Sopenharmony_ci 1, 2, 4, or 8 bytes in size; for other types of values, :exc:`RuntimeError` is 1357db96d56Sopenharmony_ci raised. It is useful when reading data from a file written on a machine with a 1367db96d56Sopenharmony_ci different byte order. 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ci .. method:: count(x) 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci Return the number of occurrences of *x* in the array. 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci .. method:: extend(iterable) 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci Append items from *iterable* to the end of the array. If *iterable* is another 1477db96d56Sopenharmony_ci array, it must have *exactly* the same type code; if not, :exc:`TypeError` will 1487db96d56Sopenharmony_ci be raised. If *iterable* is not an array, it must be iterable and its elements 1497db96d56Sopenharmony_ci must be the right type to be appended to the array. 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ci .. method:: frombytes(s) 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ci Appends items from the string, interpreting the string as an array of machine 1557db96d56Sopenharmony_ci values (as if it had been read from a file using the :meth:`fromfile` method). 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci .. versionadded:: 3.2 1587db96d56Sopenharmony_ci :meth:`!fromstring` is renamed to :meth:`frombytes` for clarity. 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci .. method:: fromfile(f, n) 1627db96d56Sopenharmony_ci 1637db96d56Sopenharmony_ci Read *n* items (as machine values) from the :term:`file object` *f* and append 1647db96d56Sopenharmony_ci them to the end of the array. If less than *n* items are available, 1657db96d56Sopenharmony_ci :exc:`EOFError` is raised, but the items that were available are still 1667db96d56Sopenharmony_ci inserted into the array. 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci .. method:: fromlist(list) 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci Append items from the list. This is equivalent to ``for x in list: 1727db96d56Sopenharmony_ci a.append(x)`` except that if there is a type error, the array is unchanged. 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_ci .. method:: fromunicode(s) 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci Extends this array with data from the given unicode string. The array must 1787db96d56Sopenharmony_ci be a type ``'u'`` array; otherwise a :exc:`ValueError` is raised. Use 1797db96d56Sopenharmony_ci ``array.frombytes(unicodestring.encode(enc))`` to append Unicode data to an 1807db96d56Sopenharmony_ci array of some other type. 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci 1837db96d56Sopenharmony_ci .. method:: index(x[, start[, stop]]) 1847db96d56Sopenharmony_ci 1857db96d56Sopenharmony_ci Return the smallest *i* such that *i* is the index of the first occurrence of 1867db96d56Sopenharmony_ci *x* in the array. The optional arguments *start* and *stop* can be 1877db96d56Sopenharmony_ci specified to search for *x* within a subsection of the array. Raise 1887db96d56Sopenharmony_ci :exc:`ValueError` if *x* is not found. 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci .. versionchanged:: 3.10 1917db96d56Sopenharmony_ci Added optional *start* and *stop* parameters. 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci .. method:: insert(i, x) 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ci Insert a new item with value *x* in the array before position *i*. Negative 1977db96d56Sopenharmony_ci values are treated as being relative to the end of the array. 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci 2007db96d56Sopenharmony_ci .. method:: pop([i]) 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci Removes the item with the index *i* from the array and returns it. The optional 2037db96d56Sopenharmony_ci argument defaults to ``-1``, so that by default the last item is removed and 2047db96d56Sopenharmony_ci returned. 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci .. method:: remove(x) 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci Remove the first occurrence of *x* from the array. 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ci 2127db96d56Sopenharmony_ci .. method:: reverse() 2137db96d56Sopenharmony_ci 2147db96d56Sopenharmony_ci Reverse the order of the items in the array. 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci .. method:: tobytes() 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci Convert the array to an array of machine values and return the bytes 2207db96d56Sopenharmony_ci representation (the same sequence of bytes that would be written to a file by 2217db96d56Sopenharmony_ci the :meth:`tofile` method.) 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci .. versionadded:: 3.2 2247db96d56Sopenharmony_ci :meth:`!tostring` is renamed to :meth:`tobytes` for clarity. 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_ci 2277db96d56Sopenharmony_ci .. method:: tofile(f) 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci Write all items (as machine values) to the :term:`file object` *f*. 2307db96d56Sopenharmony_ci 2317db96d56Sopenharmony_ci 2327db96d56Sopenharmony_ci .. method:: tolist() 2337db96d56Sopenharmony_ci 2347db96d56Sopenharmony_ci Convert the array to an ordinary list with the same items. 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci .. method:: tounicode() 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci Convert the array to a unicode string. The array must be a type ``'u'`` array; 2407db96d56Sopenharmony_ci otherwise a :exc:`ValueError` is raised. Use ``array.tobytes().decode(enc)`` to 2417db96d56Sopenharmony_ci obtain a unicode string from an array of some other type. 2427db96d56Sopenharmony_ci 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ciWhen an array object is printed or converted to a string, it is represented as 2457db96d56Sopenharmony_ci``array(typecode, initializer)``. The *initializer* is omitted if the array is 2467db96d56Sopenharmony_ciempty, otherwise it is a string if the *typecode* is ``'u'``, otherwise it is a 2477db96d56Sopenharmony_cilist of numbers. The string is guaranteed to be able to be converted back to an 2487db96d56Sopenharmony_ciarray with the same type and value using :func:`eval`, so long as the 2497db96d56Sopenharmony_ci:class:`~array.array` class has been imported using ``from array import array``. 2507db96d56Sopenharmony_ciExamples:: 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci array('l') 2537db96d56Sopenharmony_ci array('u', 'hello \u2641') 2547db96d56Sopenharmony_ci array('l', [1, 2, 3, 4, 5]) 2557db96d56Sopenharmony_ci array('d', [1.0, 2.0, 3.14]) 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ci 2587db96d56Sopenharmony_ci.. seealso:: 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci Module :mod:`struct` 2617db96d56Sopenharmony_ci Packing and unpacking of heterogeneous binary data. 2627db96d56Sopenharmony_ci 2637db96d56Sopenharmony_ci Module :mod:`xdrlib` 2647db96d56Sopenharmony_ci Packing and unpacking of External Data Representation (XDR) data as used in some 2657db96d56Sopenharmony_ci remote procedure call systems. 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci `NumPy <https://numpy.org/>`_ 2687db96d56Sopenharmony_ci The NumPy package defines another array type. 2697db96d56Sopenharmony_ci 270