W3docs

Arrays en Python

Aprende a crear y usar arrays en Python con el módulo array: typecodes, indexación, slicing, mutación de elementos y cuándo preferir arrays sobre listas.

Este capítulo cubre el módulo array integrado de Python, que proporciona una secuencia compacta y con tipo restringido para almacenar datos numéricos homogéneos. Aprenderás qué son los type codes, cómo crear e indexar arrays, cómo mutarlos con el conjunto completo de métodos disponibles y — de manera fundamental — cuándo un array es la elección correcta frente a una lista de Python común.

¿Qué es el módulo array?

El módulo array de Python proporciona un tipo de secuencia que almacena elementos de un único tipo numérico compatible con C. A diferencia de una lista, que puede contener cualquier mezcla de objetos, cada posición en un array contiene exactamente el mismo tipo de valor primitivo (un entero, un float, etc.). Esta restricción hace que los arrays sean más eficientes en memoria que las listas para grandes colecciones de números.

Puntos clave:

  • Definido en la biblioteca estándar — no requiere instalación.
  • Todos los elementos deben compartir el mismo typecode (un carácter único que identifica el tipo C).
  • Admite operaciones de secuencia estándar: indexación, slicing, iteración, len() y comprobación de pertenencia con in.
  • Útil cuando necesitas almacenamiento compacto sin recurrir a una biblioteca de terceros como NumPy.

Si ya estás familiarizado con las listas de Python, piensa en un array como una lista que sacrifica flexibilidad por eficiencia de memoria.

Typecodes

Cada array se crea con un typecode — una cadena de un carácter que le indica a Python qué tipo C usar para cada elemento y, por tanto, cuántos bytes ocupa cada posición.

TypecodeTipo CBytes mínimosUso típico
'b'signed char1Enteros pequeños de −128 a 127
'B'unsigned char1Enteros pequeños no negativos de 0 a 255
'h'signed short2Enteros medianos
'H'unsigned short2Enteros medianos no negativos
'i'signed int2Enteros de propósito general (generalmente 4 bytes)
'I'unsigned int2Enteros no negativos
'l'signed long4Enteros más grandes
'L'unsigned long4Enteros más grandes no negativos
'q'signed long long8Enteros muy grandes
'Q'unsigned long long8Enteros muy grandes no negativos
'f'float4Punto flotante de precisión simple
'd'double8Punto flotante de doble precisión

El tamaño real en bytes puede variar según la plataforma. Usa array.itemsize para inspeccionarlo en tiempo de ejecución.

Nota sobre 'u' (carácter Unicode): Este typecode fue marcado como obsoleto en Python 3.3 y eliminado en Python 3.13. No lo uses en código nuevo — usa str o bytes en su lugar.

Crear arrays

Importa el módulo y llama a array.array(typecode, initializer), donde initializer es cualquier iterable de valores compatibles con el typecode elegido.

import array as arr

# Array of signed integers
int_array = arr.array('i', [1, 2, 3, 4, 5])
print(int_array)          # array('i', [1, 2, 3, 4, 5])

# Array of double-precision floats
float_array = arr.array('d', [1.1, 2.2, 3.3])
print(float_array)        # array('d', [1.1, 2.2, 3.3])

# Inspect the typecode and bytes-per-element
print(int_array.typecode)   # i
print(int_array.itemsize)   # 4  (platform-dependent)

También puedes crear un array vacío y llenarlo más tarde:

import array as arr

empty = arr.array('i')   # empty integer array
empty.append(10)
empty.append(20)
print(empty)             # array('i', [10, 20])

Acceder a elementos del array

La indexación de arrays funciona exactamente igual que la indexación de listas: basada en cero desde la izquierda, y los índices negativos cuentan desde la derecha.

python— editable, runs on the server

Acceder a un índice fuera del rango válido lanza un IndexError, exactamente igual que con las listas.

Slicing de arrays

El slicing devuelve un nuevo array del mismo typecode que contiene los elementos seleccionados. La sintaxis es a[start:stop:step] — la misma que para listas y strings.

python— editable, runs on the server

Iterar sobre un array

Puedes iterar sobre un array con un bucle for, o comprobar la pertenencia con in:

import array as arr

a = arr.array('i', [10, 20, 30, 40, 50])

for item in a:
    print(item, end=' ')
# Output: 10 20 30 40 50

print()
print(30 in a)   # True
print(99 in a)   # False
print(len(a))    # 5

Modificar arrays

Los arrays son mutables — puedes cambiar, añadir y eliminar elementos después de crearlos.

Cambiar un elemento

Asigna un nuevo valor directamente a un índice:

python— editable, runs on the server

Añadir elementos

Usa append() para añadir un único elemento al final, o extend() para añadir múltiples elementos desde cualquier iterable:

python— editable, runs on the server

Usa insert(index, value) para colocar un elemento en una posición específica:

import array as arr

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

a.insert(2, 10)   # insert 10 before index 2
print(a)          # array('i', [1, 2, 10, 3, 4, 5])

Eliminar elementos

remove(value) elimina la primera aparición del valor dado y lanza ValueError si no se encuentra:

python— editable, runs on the server

pop(index) elimina y devuelve el elemento en index (por defecto, el último elemento):

import array as arr

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

last = a.pop()     # removes and returns 5
print(last)        # 5
print(a)           # array('i', [1, 2, 3, 4])

second = a.pop(1)  # removes and returns element at index 1
print(second)      # 2
print(a)           # array('i', [1, 3, 4])

Buscar y contar

index(value) devuelve el índice de la primera aparición de value (lanza ValueError si no está presente):

import array as arr

a = arr.array('i', [10, 20, 30, 20, 40])

print(a.index(20))   # 1 — first occurrence
print(a.index(30))   # 2

count(value) devuelve cuántas veces aparece value:

import array as arr

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

print(a.count(2))   # 3
print(a.count(9))   # 0

Invertir un array

reverse() invierte el array en su lugar:

import array as arr

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

a.reverse()
print(a)   # array('i', [5, 4, 3, 2, 1])

Convertir entre arrays y listas

tolist() convierte un array en una lista de Python estándar. Para hacer lo contrario, pasa una lista a array.array():

import array as arr

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

# array → list
my_list = a.tolist()
print(my_list)          # [1, 2, 3, 4, 5]
print(type(my_list))    # <class 'list'>

# list → array
back = arr.array('i', my_list)
print(back)             # array('i', [1, 2, 3, 4, 5])

Cambiar el tipo de elemento

El atributo typecode es de solo lectura. Para almacenar los mismos valores con un tipo diferente, crea un nuevo array usando el original como inicializador:

python— editable, runs on the server

Eficiencia de memoria: arrays vs. listas

La principal razón práctica para usar el módulo array en lugar de una lista es la memoria. Una lista almacena referencias a objetos Python; un array almacena los valores C sin procesar directamente.

import array as arr
import sys

n = 1000
my_list  = list(range(n))
my_array = arr.array('i', range(n))

print('List  size:', sys.getsizeof(my_list),  'bytes')
print('Array size:', sys.getsizeof(my_array), 'bytes')
# Example output (64-bit platform):
# List  size: 8056 bytes
# Array size: 4096 bytes

Para conjuntos de datos grandes (cientos de miles de enteros), el ahorro se acumula de manera significativa. Si necesitas aún más capacidad — matemáticas vectorizadas, arrays multidimensionales — considera NumPy.

Cuándo usar arrays vs. listas

Usa el módulo array cuando:

  • Estás almacenando una gran cantidad de valores numéricos homogéneos (lecturas de sensores, datos de píxeles, búferes de red, etc.).
  • El uso de memoria es una preocupación y no puedes usar una biblioteca de terceros.
  • Estás leyendo o escribiendo en archivos binarios o sockets de red (los métodos tofile() / fromfile() hacen esto sencillo).

Usa las listas de Python cuando:

  • Necesitas almacenar tipos mixtos u objetos arbitrarios.
  • La colección es pequeña y la memoria no es una preocupación.
  • Necesitas métodos de lista avanzados como sort() con una función clave.

Usa NumPy cuando:

  • Necesitas operaciones matemáticas sobre arrays completos (aritmética vectorizada, álgebra matricial, estadística).
  • Estás trabajando con datos multidimensionales.

Referencia de métodos

MétodoDescripción
append(x)Añade x al final del array
extend(iterable)Añade todos los elementos del iterable al final
insert(i, x)Inserta x antes del índice i
remove(x)Elimina la primera aparición de x
pop([i])Elimina y devuelve el elemento en el índice i (por defecto: el último)
index(x)Devuelve el índice de la primera aparición de x
count(x)Devuelve el número de apariciones de x
reverse()Invierte el array en su lugar
tolist()Convierte el array en una lista de Python
tofile(f)Escribe todos los elementos en el objeto de archivo abierto f como valores de máquina
fromfile(f, n)Lee n elementos del objeto de archivo f y los añade al array

Práctica

Práctica
Which of the following are valid operations on a Python array from the array module?
Which of the following are valid operations on a Python array from the array module?
Was this page helpful?