リストを N 個のほぼ等しい部分に分割する
リストを等しい部分に分割することは、一般的なプログラミングの問題です。特定の課題の 1 つは、リストの長さが必要な部分の数で割り切れない場合に均等に分割することです。
たとえば、7 つの要素のリストを 2 つの等しい部分に分割することを考えてください。理想的には、各部分にはそれぞれ 3 つと 4 つの要素がある必要があります。
提供されたコード chunks() は、リストを同じサイズの要素のチャンクに分割しますが、これにより、分割しても。あるいは、チャンクを転置することで均等な分割を実現できますが、要素の順序が崩れてしまいます。
より効率的なアプローチは、改善されたコードで示されているように、リスト ジェネレーターを使用することです。
def split(a, n): k, m = divmod(len(a), n) return (a[i*k+min(i, m):(i+1)*k+min(i+1, m)] for i in range(n))
このコードは、理想的なチャンク サイズ k と残りの要素 m を計算します。次に、リストを反復処理して必要なサイズの部分を作成するジェネレーターを生成します。
例:
>>> list(split(range(11), 3)) [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
このソリューションは、リストをほぼ等しい部分に分割する効率的な方法を提供します。要素の順序を維持します。
以上がリストをほぼ同じ部分に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。