"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo `zip ([iter (s)]*n)` divide eficientemente una lista en trozos iguales en Python?

¿Cómo `zip ([iter (s)]*n)` divide eficientemente una lista en trozos iguales en Python?

Publicado el 2025-02-06
Navegar:249

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

deconstructing zip ( [iter (s)] n) en python

en python, la función zip () combina elementos de múltiples iterables iterables en un solo iterable de tuplas. Cuando se usa con la sintaxis zip ( [iter (s)] n), ofrece una forma conveniente de dividir una lista en trozos de igual tamaño.

cómo funciona:

la expresión [iter (s)] n crea una lista que contiene n copias del iterador a través de la lista s. Cada copia del iterador comienza al comienzo de la lista. El *args descarga la lista en argumentos para zip (), lo que resulta en que se pasen n iterables a la función.

verbosa equivalente:

para recrear la funcionalidad de zip ( [iter (s)] n) con código verboso:

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

Este código primero itera sobre el número deseado de fragmentos. Para cada fragmento, usa un bucle anidado para iterar sobre los elementos de la lista y agréguelos al fragmento. El fragmento se convierte en una tupla y se agrega a la lista de fragmentos.

Ejemplo:

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)]

ambos enfoques producen el mismo resultado, con el Concise zip ( [iter (s)] n) Expresión que ofrece una sintaxis más eficiente para dividir listas en trozos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3