Diviser une liste en N parties à peu près égales
Diviser une liste en parties égales est un problème de programmation courant. Un défi particulier consiste à parvenir à une répartition égale lorsque la longueur de la liste n'est pas divisible par le nombre de parties souhaité.
Par exemple, envisagez de diviser une liste de 7 éléments en deux parties égales. Idéalement, chaque partie devrait avoir respectivement 3 et 4 éléments.
Le code fourni, chunks(), divise la liste en morceaux d'éléments de taille égale, mais cela ne peut pas donner lieu à un même divisé. Alternativement, la transposition des morceaux pourrait obtenir une répartition égale, mais cela perturberait l'ordre des éléments.
Une approche plus efficace consiste à utiliser un générateur de liste, comme démontré dans le code amélioré :
def split(a, n): k, m = divmod(len(a), n) return (a[i*k+min(i, m):(i+1)*k+min(i+1, m)] for i in range(n))
Ce code calcule la taille idéale du morceau k et les éléments restants m. Il génère ensuite un générateur qui parcourt la liste et crée des parties de la taille souhaitée.
Par exemple :
>>> list(split(range(11), 3)) [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
Cette solution fournit une méthode efficace pour diviser une liste en parties à peu près égales. , en préservant l'ordre des éléments.
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!