Chnks élégants : itérer une liste en groupes
Itérer sur une liste en morceaux de taille spécifique peut être une tâche courante dans la programmation Python. Si la liste contient des éléments à traiter dans des groupes prédéfinis, l'approche typique peut ressembler au code fourni :
for i in range(0, len(ints), 4): # Placeholder operation for illustrative purposes foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]
Bien que cette approche puisse répondre aux exigences fonctionnelles, elle peut sembler plutôt maladroite et non pythonique. Cet article explore une solution plus élégante et idiomatique utilisant une fonction de générateur personnalisée :
def chunker(seq, size): return (seq[pos:pos + size] for pos in range(0, len(seq), size))
Cette fonction de générateur, chunker, divise élégamment la séquence d'entrée en morceaux de la taille spécifiée, offrant un moyen rationalisé de parcourir eux. L'expression du générateur dans chunker produit chaque morceau, en commençant par le début de la séquence et en avançant en fonction de la taille du morceau jusqu'à ce qu'il atteigne ou dépasse la fin de la séquence.
Voici un exemple démontrant la polyvalence de la fonction chunker :
text = "I am a very, very helpful text" for group in chunker(text, 7): print(repr(group),)
Sortie :
'I am a ' 'very, v' 'ery hel' 'pful te' 'xt'
Cet exemple décompose la chaîne de texte en groupes de 7 caractères chacun. De même, il peut être utilisé avec tout type de séquence, y compris des listes d'animaux ou même des structures de données arbitraires.
Dans Python 3.12 et versions ultérieures, la fonction chunker peut être encore simplifiée à l'aide de la fonction itertools.tee() :
from itertools import tee def chunker(seq, size): a, b = tee(seq, 2) return (list(islice(a, i, None, size)) for i in range(size))
Cette variante de la fonction évite de créer une liste intermédiaire et opère directement sur la séquence d'entrée, mettant en évidence la puissance des fonctions intégrées de Python pour travailler avec itérables.
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!