[解決済み] イテラブルを一定サイズのチャンクに分割する方法
2022-05-15 01:09:29
質問
重複している可能性があります。
どのようにPythonで均等なサイズのチャンクにリストを分割するには?
私は、反復可能なものを入力として受け取り、反復可能なものの反復可能なものを返す、"batch"関数が見つからなかったことに驚いています。
例えば
for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]
または
for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]
さて、かなり単純なジェネレータと思われるものを書いてみました。
def batch(iterable, n = 1):
current_batch = []
for item in iterable:
current_batch.append(item)
if len(current_batch) == n:
yield current_batch
current_batch = []
if current_batch:
yield current_batch
しかし、上記では私が期待したようなものは得られません。
for x in batch(range(0,10),3): print x
[0]
[0, 1]
[0, 1, 2]
[3]
[3, 4]
[3, 4, 5]
[6]
[6, 7]
[6, 7, 8]
[9]
私は何かを見逃しており、これはおそらく私のpythonジェネレータの完全な理解不足を示しています。誰か正しい方向に私を指摘する気になりますか?
[編集:私は最終的に、上記の動作は、私がpython自体ではなく、ipython内でこれを実行したときにのみ起こることに気づきました]。
どのように解決するのですか?
この方が効率的(速い)でしょう
def batch(iterable, n=1):
l = len(iterable)
for ndx in range(0, l, n):
yield iterable[ndx:min(ndx + n, l)]
for x in batch(range(0, 10), 3):
print x
リストを使った例
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # list of data
for x in batch(data, 3):
print(x)
# Output
[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9, 10]
新しいリストの構築を避けることができます。
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] pathlib.Pathオブジェクトの絶対パスを取得するには?
-
[解決済み] Python 2 で HEAD HTTP リクエストを送信するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] テンプレートファイル変更時にFlaskアプリを再読み込みする
-
[解決済み] Celeryでタスクのステータスを確認するには?
-
[解決済み] ヒストグラム Matplotlib
-
[解決済み] models.pyを複数のファイルに分割する
-
[解決済み] 巨大なテキストファイルから特定の行にジャンプするには?
-
[解決済み] Matplotlibのレジェンドが動作しない
-
[解決済み] python: 2階層上のディレクトリを取得する
-
[解決済み] Python 2 で HEAD HTTP リクエストを送信するには?
-
[解決済み] PILでPNG画像を文字列に書き出すには?