blob: 78c433d1124bc4c22bf376e998ef01ebd0c92a09 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`array` --- Efficient arrays of numeric values
2===================================================
3
4.. module:: array
Benjamin Peterson2a691a82008-03-31 01:51:45 +00005 :synopsis: Space efficient arrays of uniformly typed numeric values.
Georg Brandl116aa622007-08-15 14:28:22 +00006
7
8.. index:: single: arrays
9
Benjamin Peterson2a691a82008-03-31 01:51:45 +000010This module defines an object type which can compactly represent an array of
Georg Brandl116aa622007-08-15 14:28:22 +000011basic values: characters, integers, floating point numbers. Arrays are sequence
12types and behave very much like lists, except that the type of objects stored in
13them is constrained. The type is specified at object creation time by using a
14:dfn:`type code`, which is a single character. The following type codes are
15defined:
16
17+-----------+----------------+-------------------+-----------------------+
18| Type code | C Type | Python Type | Minimum size in bytes |
19+===========+================+===================+=======================+
Georg Brandl116aa622007-08-15 14:28:22 +000020| ``'b'`` | signed char | int | 1 |
21+-----------+----------------+-------------------+-----------------------+
22| ``'B'`` | unsigned char | int | 1 |
23+-----------+----------------+-------------------+-----------------------+
Georg Brandl9cbb1252009-07-11 10:39:00 +000024| ``'u'`` | Py_UNICODE | Unicode character | 2 (see note) |
Georg Brandl116aa622007-08-15 14:28:22 +000025+-----------+----------------+-------------------+-----------------------+
26| ``'h'`` | signed short | int | 2 |
27+-----------+----------------+-------------------+-----------------------+
28| ``'H'`` | unsigned short | int | 2 |
29+-----------+----------------+-------------------+-----------------------+
30| ``'i'`` | signed int | int | 2 |
31+-----------+----------------+-------------------+-----------------------+
Georg Brandl5c106642007-11-29 17:41:05 +000032| ``'I'`` | unsigned int | int | 2 |
Georg Brandl116aa622007-08-15 14:28:22 +000033+-----------+----------------+-------------------+-----------------------+
34| ``'l'`` | signed long | int | 4 |
35+-----------+----------------+-------------------+-----------------------+
Georg Brandl5c106642007-11-29 17:41:05 +000036| ``'L'`` | unsigned long | int | 4 |
Georg Brandl116aa622007-08-15 14:28:22 +000037+-----------+----------------+-------------------+-----------------------+
38| ``'f'`` | float | float | 4 |
39+-----------+----------------+-------------------+-----------------------+
40| ``'d'`` | double | float | 8 |
41+-----------+----------------+-------------------+-----------------------+
42
Georg Brandl9cbb1252009-07-11 10:39:00 +000043.. note::
44
45 The ``'u'`` typecode corresponds to Python's unicode character. On narrow
46 Unicode builds this is 2-bytes, on wide builds this is 4-bytes.
47
Georg Brandl116aa622007-08-15 14:28:22 +000048The actual representation of values is determined by the machine architecture
49(strictly speaking, by the C implementation). The actual size can be accessed
Georg Brandlba956ae2007-11-29 17:24:34 +000050through the :attr:`itemsize` attribute.
Georg Brandl116aa622007-08-15 14:28:22 +000051
52The module defines the following type:
53
54
55.. function:: array(typecode[, initializer])
56
57 Return a new array whose items are restricted by *typecode*, and initialized
Guido van Rossum98297ee2007-11-06 21:34:58 +000058 from the optional *initializer* value, which must be a list, object
Georg Brandl48310cd2009-01-03 21:18:54 +000059 supporting the buffer interface, or iterable over elements of the
Guido van Rossum98297ee2007-11-06 21:34:58 +000060 appropriate type.
Georg Brandl116aa622007-08-15 14:28:22 +000061
Georg Brandl116aa622007-08-15 14:28:22 +000062 If given a list or string, the initializer is passed to the new array's
63 :meth:`fromlist`, :meth:`fromstring`, or :meth:`fromunicode` method (see below)
64 to add initial items to the array. Otherwise, the iterable initializer is
65 passed to the :meth:`extend` method.
66
67
68.. data:: ArrayType
69
70 Obsolete alias for :func:`array`.
71
Guido van Rossum98297ee2007-11-06 21:34:58 +000072.. data:: typecodes
73
74 A string with all available type codes.
75
Georg Brandl116aa622007-08-15 14:28:22 +000076Array objects support the ordinary sequence operations of indexing, slicing,
77concatenation, and multiplication. When using slice assignment, the assigned
78value must be an array object with the same type code; in all other cases,
79:exc:`TypeError` is raised. Array objects also implement the buffer interface,
80and may be used wherever buffer objects are supported.
81
82The following data items and methods are also supported:
83
84
85.. attribute:: array.typecode
86
87 The typecode character used to create the array.
88
89
90.. attribute:: array.itemsize
91
92 The length in bytes of one array item in the internal representation.
93
94
95.. method:: array.append(x)
96
97 Append a new item with value *x* to the end of the array.
98
99
100.. method:: array.buffer_info()
101
102 Return a tuple ``(address, length)`` giving the current memory address and the
103 length in elements of the buffer used to hold array's contents. The size of the
104 memory buffer in bytes can be computed as ``array.buffer_info()[1] *
105 array.itemsize``. This is occasionally useful when working with low-level (and
106 inherently unsafe) I/O interfaces that require memory addresses, such as certain
107 :cfunc:`ioctl` operations. The returned numbers are valid as long as the array
108 exists and no length-changing operations are applied to it.
109
110 .. note::
111
112 When using array objects from code written in C or C++ (the only way to
113 effectively make use of this information), it makes more sense to use the buffer
114 interface supported by array objects. This method is maintained for backward
115 compatibility and should be avoided in new code. The buffer interface is
116 documented in :ref:`bufferobjects`.
117
118
119.. method:: array.byteswap()
120
121 "Byteswap" all items of the array. This is only supported for values which are
122 1, 2, 4, or 8 bytes in size; for other types of values, :exc:`RuntimeError` is
123 raised. It is useful when reading data from a file written on a machine with a
124 different byte order.
125
126
127.. method:: array.count(x)
128
129 Return the number of occurrences of *x* in the array.
130
131
132.. method:: array.extend(iterable)
133
134 Append items from *iterable* to the end of the array. If *iterable* is another
135 array, it must have *exactly* the same type code; if not, :exc:`TypeError` will
136 be raised. If *iterable* is not an array, it must be iterable and its elements
137 must be the right type to be appended to the array.
138
Georg Brandl116aa622007-08-15 14:28:22 +0000139
140.. method:: array.fromfile(f, n)
141
142 Read *n* items (as machine values) from the file object *f* and append them to
143 the end of the array. If less than *n* items are available, :exc:`EOFError` is
144 raised, but the items that were available are still inserted into the array.
145 *f* must be a real built-in file object; something else with a :meth:`read`
146 method won't do.
147
148
149.. method:: array.fromlist(list)
150
151 Append items from the list. This is equivalent to ``for x in list:
152 a.append(x)`` except that if there is a type error, the array is unchanged.
153
154
155.. method:: array.fromstring(s)
156
157 Appends items from the string, interpreting the string as an array of machine
158 values (as if it had been read from a file using the :meth:`fromfile` method).
159
160
161.. method:: array.fromunicode(s)
162
163 Extends this array with data from the given unicode string. The array must
164 be a type ``'u'`` array; otherwise a :exc:`ValueError` is raised. Use
165 ``array.fromstring(unicodestring.encode(enc))`` to append Unicode data to an
166 array of some other type.
167
168
169.. method:: array.index(x)
170
171 Return the smallest *i* such that *i* is the index of the first occurrence of
172 *x* in the array.
173
174
175.. method:: array.insert(i, x)
176
177 Insert a new item with value *x* in the array before position *i*. Negative
178 values are treated as being relative to the end of the array.
179
180
181.. method:: array.pop([i])
182
183 Removes the item with the index *i* from the array and returns it. The optional
184 argument defaults to ``-1``, so that by default the last item is removed and
185 returned.
186
187
Georg Brandl116aa622007-08-15 14:28:22 +0000188.. method:: array.remove(x)
189
190 Remove the first occurrence of *x* from the array.
191
192
193.. method:: array.reverse()
194
195 Reverse the order of the items in the array.
196
197
198.. method:: array.tofile(f)
199
200 Write all items (as machine values) to the file object *f*.
201
202
203.. method:: array.tolist()
204
205 Convert the array to an ordinary list with the same items.
206
207
208.. method:: array.tostring()
209
210 Convert the array to an array of machine values and return the string
211 representation (the same sequence of bytes that would be written to a file by
212 the :meth:`tofile` method.)
213
214
215.. method:: array.tounicode()
216
217 Convert the array to a unicode string. The array must be a type ``'u'`` array;
218 otherwise a :exc:`ValueError` is raised. Use ``array.tostring().decode(enc)`` to
219 obtain a unicode string from an array of some other type.
220
221
Georg Brandl116aa622007-08-15 14:28:22 +0000222When an array object is printed or converted to a string, it is represented as
223``array(typecode, initializer)``. The *initializer* is omitted if the array is
Georg Brandld2aa7e62008-12-06 08:12:11 +0000224empty, otherwise it is a string if the *typecode* is ``'u'``, otherwise it is a
Georg Brandl116aa622007-08-15 14:28:22 +0000225list of numbers. The string is guaranteed to be able to be converted back to an
226array with the same type and value using :func:`eval`, so long as the
227:func:`array` function has been imported using ``from array import array``.
228Examples::
229
230 array('l')
Georg Brandld2aa7e62008-12-06 08:12:11 +0000231 array('u', 'hello \u2641')
Georg Brandl116aa622007-08-15 14:28:22 +0000232 array('l', [1, 2, 3, 4, 5])
233 array('d', [1.0, 2.0, 3.14])
234
235
236.. seealso::
237
238 Module :mod:`struct`
239 Packing and unpacking of heterogeneous binary data.
240
241 Module :mod:`xdrlib`
242 Packing and unpacking of External Data Representation (XDR) data as used in some
243 remote procedure call systems.
244
245 `The Numerical Python Manual <http://numpy.sourceforge.net/numdoc/HTML/numdoc.htm>`_
246 The Numeric Python extension (NumPy) defines another array type; see
247 http://numpy.sourceforge.net/ for further information about Numerical Python.
248 (A PDF version of the NumPy manual is available at
249 http://numpy.sourceforge.net/numdoc/numdoc.pdf).
250