Maison > Article > développement back-end > Comment partitionner élégamment des entiers en Python ?
Partitionnement d'entiers avec élégance en Python
La tâche de partitionnement d'entiers consiste à diviser un nombre donné en une somme d'entiers positifs, appelés parties . Un exemple courant est le partitionnement du nombre 4, qui peut être représenté par 1 1 1 1 ou 1 1 2 ou 2 2.
Solution Python élégante
Pour répondre au besoin d'une approche élégante, une fonction Python nommée partitions a été proposée :
def partitions(n, I=1): yield (n,) for i in range(I, n//2 + 1): for p in partitions(n-i, i): yield (i,) + p
Cette fonction utilise la récursivité et donne toutes les partitions possibles d'un nombre n donné. Il commence par partitionner n en une seule partie (lui-même), puis partitionne récursivement n-i en parties supérieures ou égales à i.
Évaluation des performances
Par rapport à une fonction proposée précédemment, cette solution présente des améliorations significatives à la fois en termes de vitesse et d'utilisation de la mémoire :
import timeit n = 20 # Original function def nolen(n): """Original function for integer partitioning.""" # implementation omitted for brevity # Proposed 'partitions' function def partitions(n, I=1): # implementation omitted for brevity # Measure execution time print("Original function (r0): ", timeit.timeit(lambda: r0 = nolen(n), number=100)) print("Proposed function (r1): ", timeit.timeit(lambda: r1 = list(partitions(n)), number=100)) print(f"Partitions are equal: {sorted(map(sorted, r0)) == sorted(map(sorted, r1))}")
La fonction de partition proposée est d'environ 1370 fois plus rapide que l'original tout en utilisant beaucoup moins de mémoire.
Approches alternatives
Bien que la fonction de partitions fournisse une solution performante et élégante, d'autres des options existent sur des plateformes comme ActiveState :
Conclusion
La fonction de partitions proposée offre une approche efficace et concise du partitionnement d'entiers en Python. Son élégance et sa rapidité en font un outil précieux pour les programmeurs recherchant un style de codage amélioré.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!