Comment itérer dans l’ordre de tri sur des itérables triés et fusionnés en Python

Vous avez une collection de séquences triées et vous voulez itérer sur une séquence triée composée de toutes ces séquences fusionnées ensemble. La fonction heapq.merge() fait exactement ce que vous voulez. Par exemple:

>>> import heapq
>>> a = [1, 4, 7, 10]
>>> b = [2, 5, 6, 11]
>>> for c in heapq.merge(a, b):
...     print(c)
...
1
2
4
5
6
7
10
11

La nature itérative de heapq.merge signifie qu’il ne lit jamais toutes les séquences fournies en même temps. Cela signifie que vous pouvez l’utiliser sur de très longues séquences avec très peu de surcharge de travail. Voici un exemple de fusion de deux fichiers triés:

import heapq

with open('fichier_trie_1', 'rt') as f1, \
     open('fichier_trie_2') 'rt' as f2, \
     open('fichier_fusionne', 'wt') as ff:

    for ligne in heapq.merge(f1, f2):
        outf.write(ligne)

Il est important de souligner que heapq.merge() nécessite que toutes les séquences d’entrée soient déjà triées. En particulier, il ne lit pas d’abord toutes les données dans un tas ou ne fait aucun tri préliminaire.

Elle n’effectue pas non plus de validation des entrées pour vérifier si elles répondent aux exigences de tri. Au lieu de cela, il se contente d’examiner l’ensemble des éléments à l’avant de chaque séquence d’entrée et émet le plus petit élément trouvé.

Un nouveau élément de la séquence sélectionnée est alors lu et le processus se répète jusqu’à ce que toutes les séquences de saisie aient été entièrement consommées.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here