Comment `zip([iter(s)]*n)` divise-t-il efficacement une liste en morceaux égaux en Python ?

Barbara Streisand
Libérer: 2024-11-21 03:48:11
original
613 Les gens l'ont consulté

How does `zip([iter(s)]*n)` efficiently split a list into equal chunks in Python?

Déconstruction de zip([iter(s)]n) en Python

En Python, la fonction zip() combine des éléments de plusieurs itérables en un seul itérable de tuples. Lorsqu'il est utilisé avec la syntaxe zip([iter(s)]n), il offre un moyen pratique de diviser une liste en morceaux de taille égale.

Comment ça marche :

L'expression [iter(s)]n crée une liste contenant n copies de l'itérateur sur la liste s. Chaque copie de l'itérateur commence au début de la liste. Le *args décompresse la liste en arguments pour zip(), ce qui entraîne la transmission de n itérables à la fonction.

Équivalent verbeux :

Pour recréer la fonctionnalité de zip ([iter(s)]n) avec verbeux code :

def verbose_chunk(s, n):
  """Returns a list of chunks of equal size from a list."""
  chunks = []
  for i in range(n):
    chunk = []
    for j in range(len(s) // n):
      chunk.append(next(iter(s)))
    chunks.append(tuple(chunk))
  return chunks
Copier après la connexion

Ce code parcourt d'abord le nombre de morceaux souhaité. Pour chaque morceau, il utilise une boucle imbriquée pour parcourir les éléments de la liste et les ajouter au morceau. Le morceau est ensuite converti en tuple et ajouté à la liste des morceaux.

Exemple :

s = [1,2,3,4,5,6,7,8,9]
n = 3

print(list(zip(*[iter(s)]*n)))  # [(1,2,3),(4,5,6),(7,8,9)]
print(verbose_chunk(s, n))  # [(1,2,3),(4,5,6),(7,8,9)]
Copier après la connexion

Les deux approches produisent le même résultat, avec le zip concis ([iter(s)]n) expression offrant une syntaxe plus efficace pour diviser les listes en morceaux.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal