Python Array

Note: When people say arrays in Python, more often than not, they are talking about Python lists. If that's the case, visit the Python list tutorial.

In this tutorial, we will focus on a module named array. The array module allows us to store a collection of numeric values.


Creating Python Arrays

To create an array of numeric values, we need to import the array module. For example:

import array as arr
a = arr.array('d', [1.1, 3.5, 4.5])
print(a)

Output

array('d', [1.1, 3.5, 4.5])

Here, we created an array of float type. The letter d is a type code. This determines the type of the array during creation.

Commonly used type codes are listed as follows:

Code C Type Python Type Min bytes
b signed char int 1
B unsigned char int 1
u Py_UNICODE Unicode 2
h signed short int 2
H unsigned short int 2
i signed int int 2
I unsigned int int 2
l signed long int 4
L unsigned long int 4
f float float 4
d double float 8

We will not discuss different C types in this article. We will use two type codes in this entire article: i for integers and d for floats.

Note: The u type code for Unicode characters is deprecated since version 3.3. Avoid using as much as possible.


Accessing Python Array Elements

We use indices to access elements of an array:

import array as arr
a = arr.array('i', [2, 4, 6, 8])

print("First element:", a[0])
print("Second element:", a[1])
print("Last element:", a[-1])

Output

First element: 2
Second element: 4
Last element: 8

Note: The index starts from 0 (not 1) similar to lists.


Slicing Python Arrays

We can access a range of items in an array by using the slicing operator :.

import array as arr

numbers_list = [2, 5, 62, 5, 42, 52, 48, 5]
numbers_array = arr.array('i', numbers_list)

print(numbers_array[2:5]) # 3rd to 5th
print(numbers_array[:-5]) # beginning to 4th
print(numbers_array[5:])  # 6th to end
print(numbers_array[:])   # beginning to end

Output

array('i', [62, 5, 42])
array('i', [2, 5, 62])
array('i', [52, 48, 5])
array('i', [2, 5, 62, 5, 42, 52, 48, 5])

Changing and Adding Elements

Arrays are mutable; their elements can be changed in a similar way as lists.

import array as arr

numbers = arr.array('i', [1, 2, 3, 5, 7, 10])

# changing first element
numbers[0] = 0    
print(numbers)     # Output: array('i', [0, 2, 3, 5, 7, 10])

# changing 3rd to 5th element
numbers[2:5] = arr.array('i', [4, 6, 8])   
print(numbers)     # Output: array('i', [0, 2, 4, 6, 8, 10])

Output

array('i', [0, 2, 3, 5, 7, 10])
array('i', [0, 2, 4, 6, 8, 10])

We can add one item to the array using the append() method, or add several items using the extend() method.

import array as arr

numbers = arr.array('i', [1, 2, 3])

numbers.append(4)
print(numbers)     # Output: array('i', [1, 2, 3, 4])

# extend() appends iterable to the end of the array
numbers.extend([5, 6, 7])
print(numbers)     # Output: array('i', [1, 2, 3, 4, 5, 6, 7])

Output

array('i', [1, 2, 3, 4])
array('i', [1, 2, 3, 4, 5, 6, 7])

We can also concatenate two arrays using + operator.

import array as arr

odd = arr.array('i', [1, 3, 5])
even = arr.array('i', [2, 4, 6])

numbers = arr.array('i')   # creating empty array of integer
numbers = odd + even

print(numbers)

Output

array('i', [1, 3, 5, 2, 4, 6])    

Removing Python Array Elements

We can delete one or more items from an array using Python's del statement.

import array as arr

number = arr.array('i', [1, 2, 3, 3, 4])

del number[2]  # removing third element
print(number)  # Output: array('i', [1, 2, 3, 4])

del number  # deleting entire array
print(number)  # Error: array is not defined

Output

array('i', [1, 2, 3, 4])
Traceback (most recent call last):
  File "<string>", line 9, in <module>
    print(number)  # Error: array is not defined
NameError: name 'number' is not defined

We can use the remove() method to remove the given item, and pop() method to remove an item at the given index.

import array as arr

numbers = arr.array('i', [10, 11, 12, 12, 13])

numbers.remove(12)
print(numbers)   # Output: array('i', [10, 11, 12, 13])

print(numbers.pop(2))   # Output: 12
print(numbers)   # Output: array('i', [10, 11, 13])

Output

array('i', [10, 11, 12, 13])
12
array('i', [10, 11, 13])

Check this page to learn more about Python array and array methods.


Python Lists Vs Arrays

In Python, we can treat lists as arrays. However, we cannot constrain the type of elements stored in a list. For example:

# elements of different types
a = [1, 3.5, "Hello"] 

If you create arrays using the array module, all elements of the array must be of the same numeric type.

import array as arr
# Error
a = arr.array('d', [1, 3.5, "Hello"])

Output

Traceback (most recent call last):
  File "<string>", line 3, in <module>
    a = arr.array('d', [1, 3.5, "Hello"])
TypeError: must be real number, not str

When to use arrays?

Lists are much more flexible than arrays. They can store elements of different data types including strings. And, if you need to do mathematical computation on arrays and matrices, you are much better off using something like NumPy.

So, what are the uses of arrays created from the Python array module?

The array.array type is just a thin wrapper on C arrays which provides space-efficient storage of basic C-style data types. If you need to allocate an array that you know will not change, then arrays can be faster and use less memory than lists.

Unless you don't really need arrays (array module may be needed to interface with C code), the use of the array module is not recommended.