English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

¿Cómo combinar dos arrays ordenados en Python usando heapq?

En esta sección, veremos cómo usar el módulo heapq de Python para combinar dos listas ordenadas. Por ejemplo, si list1 = [10,20,30,40] y además list2 = [100,200,300,400,500],合并后则返回list3 = [10,20,30,40,100, 200、300、400、500]

Para realizar esta tarea, utilizaremos el módulo heapq. Este módulo se incluye con Python como módulo de biblioteca estándar. Por lo tanto, necesitamos importarlo antes de usarlo.

import heapq

El módulo heapq tiene algunas propiedades. Estas son:-

Método heapq.heapify(iterable)

Se utiliza para convertir un conjunto iterable de datos en una estructura de datos de pila.

Método heapq.heappush(heap, element)

Este método se utiliza para insertar un elemento en la pila. Después de eso, rehace toda la estructura de la pila.

Método heapq.heappop(heap)

Este método se utiliza para devolver y eliminar un elemento de la parte superior de la pila y realizar heapify en el resto de los elementos.

Método heapq.heappushpop(heap, element)

Este método se utiliza para insertar y extraer elementos en una sola declaración.

Método heapq.heapreplace(heap, element)

Este método se utiliza para insertar y extraer elementos en una sola declaración. Elimina un elemento de la raíz de la pila y lo inserta en la pila.

Método heapq.nlargest(n, iterable, key=None)

Este método se utiliza para devolver n elementos más grandes de la pila.

Método heapq.nsmallest(n, iterable, key=None)

Este método se utiliza para devolver n elementos más pequeños de la pila.

Código de ejemplo

import heapq
first_list = [45, 12, 63, 95, 74, 21, 20, 15, 36]
second_list = [42, 13, 69, 54, 15]
first_list = sorted(first_list)
second_list = sorted(second_list)
print('Primera lista ordenada: ',) + str(first_list))
print('Segunda lista ordenada: ',) + str(second_list))
final_list = list(heapq.merge(first_list, second_list))
print('La lista final: ',) + str(final_list))

Resultado de salida

Primera lista ordenada: [12, 15, 20, 21, 36, 45, 63, 74, 95]
Segunda lista ordenada: [13, 15, 42, 54, 69]
La lista final: [12, 13, 15, 15, 20, 21, 36, 42, 45, 54, 63, 69, 74, 95]