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 サイトの他の関連記事を参照してください。