Heim  >  Artikel  >  Backend-Entwicklung  >  Wie teilt „zip([iter(s)]*n)' eine Liste in Python effizient in gleiche Teile auf?

Wie teilt „zip([iter(s)]*n)' eine Liste in Python effizient in gleiche Teile auf?

Barbara Streisand
Barbara StreisandOriginal
2024-11-21 03:48:11626Durchsuche

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

Zip([iter(s)]n) in Python dekonstruieren

In Python kombiniert die zip()-Funktion Elemente aus mehreren Iterables in ein einzelnes Iterable von Tupeln. Bei Verwendung mit der Syntax zip([iter(s)]n) bietet es eine praktische Möglichkeit, eine Liste in gleich große Teile aufzuteilen.

So funktioniert es:

Der Ausdruck [iter(s)]n erstellt eine Liste mit n Kopien des Iterators over die Liste s. Jede Kopie des Iterators beginnt am Anfang der Liste. Die *args entpacken die Liste in Argumente für zip(), was dazu führt, dass n Iterables an die Funktion übergeben werden.

Ausführliches Äquivalent:

Um die Funktionalität von zip wiederherzustellen ([iter(s)]n) mit ausführlich 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

Dieser Code iteriert zunächst über die gewünschte Anzahl von Blöcken. Für jeden Block wird eine verschachtelte Schleife verwendet, um die Elemente in der Liste zu durchlaufen und sie dem Block hinzuzufügen. Der Chunk wird dann in ein Tupel umgewandelt und zur Liste der Chunks hinzugefügt.

Beispiel:

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

Beide Ansätze führen zum gleichen Ergebnis, mit dem prägnanten Zip ([iter(s)]n) Ausdruck, der eine effizientere Syntax zum Aufteilen von Listen in Blöcke bietet.

Das obige ist der detaillierte Inhalt vonWie teilt „zip([iter(s)]*n)' eine Liste in Python effizient in gleiche Teile auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn