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