| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1 |  | 
 | 2 | :mod:`array` --- Efficient arrays of numeric values | 
 | 3 | =================================================== | 
 | 4 |  | 
 | 5 | .. module:: array | 
| Raymond Hettinger | 594b76b | 2008-03-29 10:42:07 +0000 | [diff] [blame] | 6 |    :synopsis: Space efficient arrays of uniformly typed numeric values. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 7 |  | 
 | 8 |  | 
 | 9 | .. index:: single: arrays | 
 | 10 |  | 
| Georg Brandl | 0069d85 | 2008-03-29 11:46:18 +0000 | [diff] [blame] | 11 | This module defines an object type which can compactly represent an array of | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 12 | basic values: characters, integers, floating point numbers.  Arrays are sequence | 
 | 13 | types and behave very much like lists, except that the type of objects stored in | 
 | 14 | them is constrained.  The type is specified at object creation time by using a | 
 | 15 | :dfn:`type code`, which is a single character.  The following type codes are | 
 | 16 | defined: | 
 | 17 |  | 
 | 18 | +-----------+----------------+-------------------+-----------------------+ | 
 | 19 | | Type code | C Type         | Python Type       | Minimum size in bytes | | 
 | 20 | +===========+================+===================+=======================+ | 
 | 21 | | ``'c'``   | char           | character         | 1                     | | 
 | 22 | +-----------+----------------+-------------------+-----------------------+ | 
 | 23 | | ``'b'``   | signed char    | int               | 1                     | | 
 | 24 | +-----------+----------------+-------------------+-----------------------+ | 
 | 25 | | ``'B'``   | unsigned char  | int               | 1                     | | 
 | 26 | +-----------+----------------+-------------------+-----------------------+ | 
| Georg Brandl | 7750505 | 2009-07-11 10:37:38 +0000 | [diff] [blame] | 27 | | ``'u'``   | Py_UNICODE     | Unicode character | 2 (see note)          | | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 28 | +-----------+----------------+-------------------+-----------------------+ | 
 | 29 | | ``'h'``   | signed short   | int               | 2                     | | 
 | 30 | +-----------+----------------+-------------------+-----------------------+ | 
 | 31 | | ``'H'``   | unsigned short | int               | 2                     | | 
 | 32 | +-----------+----------------+-------------------+-----------------------+ | 
 | 33 | | ``'i'``   | signed int     | int               | 2                     | | 
 | 34 | +-----------+----------------+-------------------+-----------------------+ | 
 | 35 | | ``'I'``   | unsigned int   | long              | 2                     | | 
 | 36 | +-----------+----------------+-------------------+-----------------------+ | 
 | 37 | | ``'l'``   | signed long    | int               | 4                     | | 
 | 38 | +-----------+----------------+-------------------+-----------------------+ | 
 | 39 | | ``'L'``   | unsigned long  | long              | 4                     | | 
 | 40 | +-----------+----------------+-------------------+-----------------------+ | 
 | 41 | | ``'f'``   | float          | float             | 4                     | | 
 | 42 | +-----------+----------------+-------------------+-----------------------+ | 
 | 43 | | ``'d'``   | double         | float             | 8                     | | 
 | 44 | +-----------+----------------+-------------------+-----------------------+ | 
 | 45 |  | 
| Georg Brandl | 7750505 | 2009-07-11 10:37:38 +0000 | [diff] [blame] | 46 | .. note:: | 
 | 47 |  | 
 | 48 |    The ``'u'`` typecode corresponds to Python's unicode character.  On narrow | 
 | 49 |    Unicode builds this is 2-bytes, on wide builds this is 4-bytes. | 
 | 50 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 51 | The actual representation of values is determined by the machine architecture | 
 | 52 | (strictly speaking, by the C implementation).  The actual size can be accessed | 
 | 53 | through the :attr:`itemsize` attribute.  The values stored  for ``'L'`` and | 
 | 54 | ``'I'`` items will be represented as Python long integers when retrieved, | 
 | 55 | because Python's plain integer type cannot represent the full range of C's | 
 | 56 | unsigned (long) integers. | 
 | 57 |  | 
 | 58 | The module defines the following type: | 
 | 59 |  | 
 | 60 |  | 
| Georg Brandl | c91cbb9 | 2009-07-11 14:23:38 +0000 | [diff] [blame] | 61 | .. class:: array(typecode[, initializer]) | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 62 |  | 
| Georg Brandl | c91cbb9 | 2009-07-11 14:23:38 +0000 | [diff] [blame] | 63 |    A new array whose items are restricted by *typecode*, and initialized | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 64 |    from the optional *initializer* value, which must be a list, string, or iterable | 
 | 65 |    over elements of the appropriate type. | 
 | 66 |  | 
 | 67 |    .. versionchanged:: 2.4 | 
 | 68 |       Formerly, only lists or strings were accepted. | 
 | 69 |  | 
 | 70 |    If given a list or string, the initializer is passed to the new array's | 
 | 71 |    :meth:`fromlist`, :meth:`fromstring`, or :meth:`fromunicode` method (see below) | 
 | 72 |    to add initial items to the array.  Otherwise, the iterable initializer is | 
 | 73 |    passed to the :meth:`extend` method. | 
 | 74 |  | 
 | 75 |  | 
 | 76 | .. data:: ArrayType | 
 | 77 |  | 
| Georg Brandl | c91cbb9 | 2009-07-11 14:23:38 +0000 | [diff] [blame] | 78 |    Obsolete alias for :class:`array`. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 79 |  | 
 | 80 | Array objects support the ordinary sequence operations of indexing, slicing, | 
 | 81 | concatenation, and multiplication.  When using slice assignment, the assigned | 
 | 82 | value must be an array object with the same type code; in all other cases, | 
 | 83 | :exc:`TypeError` is raised. Array objects also implement the buffer interface, | 
 | 84 | and may be used wherever buffer objects are supported. | 
 | 85 |  | 
 | 86 | The following data items and methods are also supported: | 
 | 87 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 88 | .. attribute:: array.typecode | 
 | 89 |  | 
 | 90 |    The typecode character used to create the array. | 
 | 91 |  | 
 | 92 |  | 
 | 93 | .. attribute:: array.itemsize | 
 | 94 |  | 
 | 95 |    The length in bytes of one array item in the internal representation. | 
 | 96 |  | 
 | 97 |  | 
 | 98 | .. method:: array.append(x) | 
 | 99 |  | 
 | 100 |    Append a new item with value *x* to the end of the array. | 
 | 101 |  | 
 | 102 |  | 
 | 103 | .. method:: array.buffer_info() | 
 | 104 |  | 
 | 105 |    Return a tuple ``(address, length)`` giving the current memory address and the | 
 | 106 |    length in elements of the buffer used to hold array's contents.  The size of the | 
 | 107 |    memory buffer in bytes can be computed as ``array.buffer_info()[1] * | 
 | 108 |    array.itemsize``.  This is occasionally useful when working with low-level (and | 
 | 109 |    inherently unsafe) I/O interfaces that require memory addresses, such as certain | 
| Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 110 |    :c:func:`ioctl` operations.  The returned numbers are valid as long as the array | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 111 |    exists and no length-changing operations are applied to it. | 
 | 112 |  | 
 | 113 |    .. note:: | 
 | 114 |  | 
 | 115 |       When using array objects from code written in C or C++ (the only way to | 
 | 116 |       effectively make use of this information), it makes more sense to use the buffer | 
 | 117 |       interface supported by array objects.  This method is maintained for backward | 
 | 118 |       compatibility and should be avoided in new code.  The buffer interface is | 
 | 119 |       documented in :ref:`bufferobjects`. | 
 | 120 |  | 
 | 121 |  | 
 | 122 | .. method:: array.byteswap() | 
 | 123 |  | 
 | 124 |    "Byteswap" all items of the array.  This is only supported for values which are | 
 | 125 |    1, 2, 4, or 8 bytes in size; for other types of values, :exc:`RuntimeError` is | 
 | 126 |    raised.  It is useful when reading data from a file written on a machine with a | 
 | 127 |    different byte order. | 
 | 128 |  | 
 | 129 |  | 
 | 130 | .. method:: array.count(x) | 
 | 131 |  | 
 | 132 |    Return the number of occurrences of *x* in the array. | 
 | 133 |  | 
 | 134 |  | 
 | 135 | .. method:: array.extend(iterable) | 
 | 136 |  | 
 | 137 |    Append items from *iterable* to the end of the array.  If *iterable* is another | 
 | 138 |    array, it must have *exactly* the same type code; if not, :exc:`TypeError` will | 
 | 139 |    be raised.  If *iterable* is not an array, it must be iterable and its elements | 
 | 140 |    must be the right type to be appended to the array. | 
 | 141 |  | 
 | 142 |    .. versionchanged:: 2.4 | 
 | 143 |       Formerly, the argument could only be another array. | 
 | 144 |  | 
 | 145 |  | 
 | 146 | .. method:: array.fromfile(f, n) | 
 | 147 |  | 
 | 148 |    Read *n* items (as machine values) from the file object *f* and append them to | 
 | 149 |    the end of the array.  If less than *n* items are available, :exc:`EOFError` is | 
 | 150 |    raised, but the items that were available are still inserted into the array. | 
 | 151 |    *f* must be a real built-in file object; something else with a :meth:`read` | 
 | 152 |    method won't do. | 
 | 153 |  | 
 | 154 |  | 
 | 155 | .. method:: array.fromlist(list) | 
 | 156 |  | 
 | 157 |    Append items from the list.  This is equivalent to ``for x in list: | 
 | 158 |    a.append(x)`` except that if there is a type error, the array is unchanged. | 
 | 159 |  | 
 | 160 |  | 
 | 161 | .. method:: array.fromstring(s) | 
 | 162 |  | 
 | 163 |    Appends items from the string, interpreting the string as an array of machine | 
 | 164 |    values (as if it had been read from a file using the :meth:`fromfile` method). | 
 | 165 |  | 
 | 166 |  | 
 | 167 | .. method:: array.fromunicode(s) | 
 | 168 |  | 
 | 169 |    Extends this array with data from the given unicode string.  The array must | 
 | 170 |    be a type ``'u'`` array; otherwise a :exc:`ValueError` is raised.  Use | 
 | 171 |    ``array.fromstring(unicodestring.encode(enc))`` to append Unicode data to an | 
 | 172 |    array of some other type. | 
 | 173 |  | 
 | 174 |  | 
 | 175 | .. method:: array.index(x) | 
 | 176 |  | 
 | 177 |    Return the smallest *i* such that *i* is the index of the first occurrence of | 
 | 178 |    *x* in the array. | 
 | 179 |  | 
 | 180 |  | 
 | 181 | .. method:: array.insert(i, x) | 
 | 182 |  | 
 | 183 |    Insert a new item with value *x* in the array before position *i*. Negative | 
 | 184 |    values are treated as being relative to the end of the array. | 
 | 185 |  | 
 | 186 |  | 
 | 187 | .. method:: array.pop([i]) | 
 | 188 |  | 
 | 189 |    Removes the item with the index *i* from the array and returns it. The optional | 
 | 190 |    argument defaults to ``-1``, so that by default the last item is removed and | 
 | 191 |    returned. | 
 | 192 |  | 
 | 193 |  | 
 | 194 | .. method:: array.read(f, n) | 
 | 195 |  | 
 | 196 |    .. deprecated:: 1.5.1 | 
 | 197 |       Use the :meth:`fromfile` method. | 
 | 198 |  | 
 | 199 |    Read *n* items (as machine values) from the file object *f* and append them to | 
 | 200 |    the end of the array.  If less than *n* items are available, :exc:`EOFError` is | 
 | 201 |    raised, but the items that were available are still inserted into the array. | 
 | 202 |    *f* must be a real built-in file object; something else with a :meth:`read` | 
 | 203 |    method won't do. | 
 | 204 |  | 
 | 205 |  | 
 | 206 | .. method:: array.remove(x) | 
 | 207 |  | 
 | 208 |    Remove the first occurrence of *x* from the array. | 
 | 209 |  | 
 | 210 |  | 
 | 211 | .. method:: array.reverse() | 
 | 212 |  | 
 | 213 |    Reverse the order of the items in the array. | 
 | 214 |  | 
 | 215 |  | 
 | 216 | .. method:: array.tofile(f) | 
 | 217 |  | 
 | 218 |    Write all items (as machine values) to the file object *f*. | 
 | 219 |  | 
 | 220 |  | 
 | 221 | .. method:: array.tolist() | 
 | 222 |  | 
 | 223 |    Convert the array to an ordinary list with the same items. | 
 | 224 |  | 
 | 225 |  | 
 | 226 | .. method:: array.tostring() | 
 | 227 |  | 
 | 228 |    Convert the array to an array of machine values and return the string | 
 | 229 |    representation (the same sequence of bytes that would be written to a file by | 
 | 230 |    the :meth:`tofile` method.) | 
 | 231 |  | 
 | 232 |  | 
 | 233 | .. method:: array.tounicode() | 
 | 234 |  | 
 | 235 |    Convert the array to a unicode string.  The array must be a type ``'u'`` array; | 
 | 236 |    otherwise a :exc:`ValueError` is raised. Use ``array.tostring().decode(enc)`` to | 
 | 237 |    obtain a unicode string from an array of some other type. | 
 | 238 |  | 
 | 239 |  | 
 | 240 | .. method:: array.write(f) | 
 | 241 |  | 
 | 242 |    .. deprecated:: 1.5.1 | 
 | 243 |       Use the :meth:`tofile` method. | 
 | 244 |  | 
 | 245 |    Write all items (as machine values) to the file object *f*. | 
 | 246 |  | 
 | 247 | When an array object is printed or converted to a string, it is represented as | 
 | 248 | ``array(typecode, initializer)``.  The *initializer* is omitted if the array is | 
 | 249 | empty, otherwise it is a string if the *typecode* is ``'c'``, otherwise it is a | 
 | 250 | list of numbers.  The string is guaranteed to be able to be converted back to an | 
 | 251 | array with the same type and value using :func:`eval`, so long as the | 
 | 252 | :func:`array` function has been imported using ``from array import array``. | 
 | 253 | Examples:: | 
 | 254 |  | 
 | 255 |    array('l') | 
 | 256 |    array('c', 'hello world') | 
 | 257 |    array('u', u'hello \u2641') | 
 | 258 |    array('l', [1, 2, 3, 4, 5]) | 
 | 259 |    array('d', [1.0, 2.0, 3.14]) | 
 | 260 |  | 
 | 261 |  | 
 | 262 | .. seealso:: | 
 | 263 |  | 
 | 264 |    Module :mod:`struct` | 
 | 265 |       Packing and unpacking of heterogeneous binary data. | 
 | 266 |  | 
 | 267 |    Module :mod:`xdrlib` | 
 | 268 |       Packing and unpacking of External Data Representation (XDR) data as used in some | 
 | 269 |       remote procedure call systems. | 
 | 270 |  | 
| Ezio Melotti | c49805e | 2013-06-09 01:04:21 +0300 | [diff] [blame] | 271 |    `The Numerical Python Documentation <http://docs.scipy.org/doc/>`_ | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 272 |       The Numeric Python extension (NumPy) defines another array type; see | 
| Ezio Melotti | c49805e | 2013-06-09 01:04:21 +0300 | [diff] [blame] | 273 |       http://www.numpy.org/ for further information about Numerical Python. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 274 |  |