# Python Array of Numeric Values

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.

Tóm Tắt

## 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)
print("Second element:", a)
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
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  # 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])```

## 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. 