Python で `zip([iter(s)]*n)` はどのように効率的にリストを等しいチャンクに分割するのでしょうか?

Barbara Streisand
リリース: 2024-11-21 03:48:11
オリジナル
614 人が閲覧しました

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

Python で zip([iter(s)]n) を分解する

Python では、zip() 関数は複数の反復可能オブジェクトの要素を結合しますタプルの単一の反復可能に変換します。構文 zip([iter(s)]n) とともに使用すると、リストを同じサイズのチャンクに分割する便利な方法が提供されます。

仕組み:

[iter(s)]n は、リスト s に対する反復子の n 個のコピーを含むリストを作成します。イテレータの各コピーはリストの先頭から始まります。 *args はリストを zip() の引数に解凍し、n iterable が関数に渡されます。

Verbose Equivalent:

zip の機能を再作成するには([iter(s)]n) 冗長コード:

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
ログイン後にコピー

このコードは、まず、必要な数のチャンクを反復処理します。チャンクごとに、ネストされたループを使用してリスト内の要素を反復処理し、それらをチャンクに追加します。次に、チャンクはタプルに変換され、チャンクのリストに追加されます。

例:

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)]
ログイン後にコピー

どちらのアプローチでも、簡潔な zip を使用して同じ結果が生成されます。 ([iter(s)]n) 式は、リストをチャンクに分割するためのより効率的な構文を提供します。

以上がPython で `zip([iter(s)]*n)` はどのように効率的にリストを等しいチャンクに分割するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート