[2] | 1 |
|
---|
| 2 | :mod:`array` --- Efficient arrays of numeric values
|
---|
| 3 | ===================================================
|
---|
| 4 |
|
---|
| 5 | .. module:: array
|
---|
| 6 | :synopsis: Space efficient arrays of uniformly typed numeric values.
|
---|
| 7 |
|
---|
| 8 |
|
---|
| 9 | .. index:: single: arrays
|
---|
| 10 |
|
---|
| 11 | This module defines an object type which can compactly represent an array of
|
---|
| 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 | +-----------+----------------+-------------------+-----------------------+
|
---|
| 27 | | ``'u'`` | Py_UNICODE | Unicode character | 2 (see note) |
|
---|
| 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 |
|
---|
| 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 |
|
---|
| 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 |
|
---|
| 61 | .. class:: array(typecode[, initializer])
|
---|
| 62 |
|
---|
| 63 | A new array whose items are restricted by *typecode*, and initialized
|
---|
| 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 |
|
---|
| 78 | Obsolete alias for :class:`array`.
|
---|
| 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 |
|
---|
| 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
|
---|
[391] | 110 | :c:func:`ioctl` operations. The returned numbers are valid as long as the array
|
---|
[2] | 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 |
|
---|
[391] | 271 | `The Numerical Python Documentation <http://docs.scipy.org/doc/>`_
|
---|
[2] | 272 | The Numeric Python extension (NumPy) defines another array type; see
|
---|
[391] | 273 | http://www.numpy.org/ for further information about Numerical Python.
|
---|
[2] | 274 |
|
---|