[解決済み] リストを均等な大きさの塊に分割するには?
2022-03-15 04:36:19
質問
任意の長さのリストがあり、それを同じ大きさのチャンクに分割して演算する必要があります。これを行うには、カウンタと2つのリストを保持し、2番目のリストが一杯になったら、それを最初のリストに追加し、次のデータのラウンドのために2番目のリストを空にするといった明白な方法がありますが、これは非常に高価になる可能性があります。
ジェネレータを使うなどして、どんな長さのリストにも対応できる良い解決策をご存知の方はいらっしゃいませんか?
で何か便利なものはないかと探していました。
itertools
しかし、明らかに有用なものは見つかりませんでした。見落としているかもしれませんが。
関連する質問 リストをチャンクで反復処理する最も "pythonic "な方法は何ですか?
どのように解決するのですか?
欲しいチャンクを生成するジェネレーターを紹介します。
def chunks(lst, n):
"""Yield successive n-sized chunks from lst."""
for i in range(0, len(lst), n):
yield lst[i:i + n]
import pprint
pprint.pprint(list(chunks(range(10, 75), 10)))
[[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74]]
Python2を使っている場合は
xrange()
の代わりに
range()
:
def chunks(lst, n):
"""Yield successive n-sized chunks from lst."""
for i in xrange(0, len(lst), n):
yield lst[i:i + n]
また、関数を書く代わりに単純にリスト内包を使うこともできますが、このような操作を名前付き関数でカプセル化すると、コードが理解しやすくなります。Python 3:
[lst[i:i + n] for i in range(0, len(lst), n)]
Python 2 のバージョンです。
[lst[i:i + n] for i in xrange(0, len(lst), n)]
関連
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] Javaで文字列を分割する方法
-
[解決済み] 配列をチャンクに分割する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
Python入門 openを使ったファイルの読み書きの方法
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】リスト内の2つの要素ごとに繰り返し処理を行う【重複あり
-
[解決済み】pythonのリストを他の「サブリスト」、つまりより小さなリストに分割する【重複】。