Remove outdated include; this include was breaking OS X builds using
[python.git] / Doc / library / array.rst
blobf7fb4e372c6e78f7da899afe23d7a3bfcab7ff87
2 :mod:`array` --- Efficient arrays of numeric values
3 ===================================================
5 .. module:: array
6    :synopsis: Space efficient arrays of uniformly typed numeric values.
9 .. index:: single: arrays
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:
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 +-----------+----------------+-------------------+-----------------------+
46 .. note::
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.
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.
58 The module defines the following type:
61 .. class:: array(typecode[, initializer])
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.
67    .. versionchanged:: 2.4
68       Formerly, only lists or strings were accepted.
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.
76 .. data:: ArrayType
78    Obsolete alias for :class:`array`.
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.
86 The following data items and methods are also supported:
88 .. attribute:: array.typecode
90    The typecode character used to create the array.
93 .. attribute:: array.itemsize
95    The length in bytes of one array item in the internal representation.
98 .. method:: array.append(x)
100    Append a new item with value *x* to the end of the array.
103 .. method:: array.buffer_info()
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
110    :cfunc:`ioctl` operations.  The returned numbers are valid as long as the array
111    exists and no length-changing operations are applied to it.
113    .. note::
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`.
122 .. method:: array.byteswap()
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.
130 .. method:: array.count(x)
132    Return the number of occurrences of *x* in the array.
135 .. method:: array.extend(iterable)
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.
142    .. versionchanged:: 2.4
143       Formerly, the argument could only be another array.
146 .. method:: array.fromfile(f, n)
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.
155 .. method:: array.fromlist(list)
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.
161 .. method:: array.fromstring(s)
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).
167 .. method:: array.fromunicode(s)
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.
175 .. method:: array.index(x)
177    Return the smallest *i* such that *i* is the index of the first occurrence of
178    *x* in the array.
181 .. method:: array.insert(i, x)
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.
187 .. method:: array.pop([i])
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.
194 .. method:: array.read(f, n)
196    .. deprecated:: 1.5.1
197       Use the :meth:`fromfile` method.
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.
206 .. method:: array.remove(x)
208    Remove the first occurrence of *x* from the array.
211 .. method:: array.reverse()
213    Reverse the order of the items in the array.
216 .. method:: array.tofile(f)
218    Write all items (as machine values) to the file object *f*.
221 .. method:: array.tolist()
223    Convert the array to an ordinary list with the same items.
226 .. method:: array.tostring()
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.)
233 .. method:: array.tounicode()
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.
240 .. method:: array.write(f)
242    .. deprecated:: 1.5.1
243       Use the :meth:`tofile` method.
245    Write all items (as machine values) to the file object *f*.
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::
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])
262 .. seealso::
264    Module :mod:`struct`
265       Packing and unpacking of heterogeneous binary data.
267    Module :mod:`xdrlib`
268       Packing and unpacking of External Data Representation (XDR) data as used in some
269       remote procedure call systems.
271    `The Numerical Python Manual <http://numpy.sourceforge.net/numdoc/HTML/numdoc.htm>`_
272       The Numeric Python extension (NumPy) defines another array type; see
273       http://numpy.sourceforge.net/ for further information about Numerical Python.
274       (A PDF version of the NumPy manual is available at
275       http://numpy.sourceforge.net/numdoc/numdoc.pdf).