Bagaimanakah `zip([iter(s)]*n)` dengan cekap membahagikan senarai kepada bahagian yang sama dalam Python?

Barbara Streisand
Lepaskan: 2024-11-21 03:48:11
asal
600 orang telah melayarinya

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

Menyahbina zip([iter(s)]n) dalam Python

Dalam Python, fungsi zip() menggabungkan elemen daripada berbilang iterable ke dalam satu tuple yang boleh diulang. Apabila digunakan dengan zip sintaks([iter(s)]n), ia menawarkan cara yang mudah untuk membahagikan senarai kepada ketulan yang sama saiz.

Cara Ia Berfungsi:

Ungkapan [iter(s)]n mencipta senarai yang mengandungi n salinan daripada iterator atas senarai s. Setiap salinan iterator bermula pada permulaan senarai. *args membongkar senarai menjadi argumen untuk zip(), menyebabkan n iterables dihantar ke fungsi.

Verbose Equivalent:

Untuk mencipta semula kefungsian zip ([iter(s)]n) dengan verbose kod:

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
Salin selepas log masuk

Kod ini mula-mula berulang ke atas bilangan ketulan yang dikehendaki. Untuk setiap ketulan, ia menggunakan gelung bersarang untuk mengulangi elemen dalam senarai dan menambahkannya pada ketulan. Bongkahan itu kemudiannya ditukar menjadi tuple dan ditambah pada senarai ketulan.

Contoh:

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)]
Salin selepas log masuk

Kedua-dua pendekatan menghasilkan hasil yang sama, dengan zip ringkas ([iter(s)]n) ungkapan yang menawarkan sintaks yang lebih cekap untuk membahagikan senarai kepada ketulan.

Atas ialah kandungan terperinci Bagaimanakah `zip([iter(s)]*n)` dengan cekap membahagikan senarai kepada bahagian yang sama dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan