"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment `zip ([iter (s)] * n)` divise-t-il efficacement une liste en morceaux égaux en python?

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

Publié le 2025-02-06
Parcourir:945

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

Déstructing zip ( [iter (s)] n) dans python

dans python, la fonction zip () combine des éléments à partir de plusieurs itérables 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 cela fonctionne:

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éballait la liste en arguments pour zip (), ce qui entraîne une transmission des iterables à la fonction.

Verbose Equivalent:

pour recréer les fonctionnalités de Zip ( [iter (s)] n) avec le code verbeux:

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

Ce code itère d'abord le nombre de morceaux souhaités. 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)]

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3