1. ホーム
  2. python

[解決済み] リストをチャンクで反復処理する最も "pythonic "な方法は何ですか?

2022-03-17 14:45:14

質問

整数のリストを入力とするPythonスクリプトがあるのですが、一度に4つの整数を処理する必要があります。 残念ながら、私は入力を制御することができません、または私はそれが4つの要素のタプルのリストとして渡されるでしょう。 現在、私はこの方法で反復処理をしている。

for i in range(0, len(ints), 4):
    # dummy op for example code
    foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]

しかし、これは "C-think" のように見えるので、この状況を扱うより Pythonic な方法があるのではと思います。 リストはイテレート後に破棄されるので、保存する必要はありません。 おそらくこのようなものが良いのではないでしょうか?

while ints:
    foo += ints[0] * ints[1] + ints[2] * ints[3]
    ints[0:4] = []

でも、まだ、quot;feel"はしっくりきませんね。

関連する質問 Pythonでリストを均等な大きさのチャンクに分割するにはどうしたらいいですか?

どのように解決するのですか?

を修正したものです。 レシピ セクションは、Python の itertools のドキュメントを参照してください。

from itertools import zip_longest

def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

grouper('ABCDEFG', 3, 'x')  # --> 'ABC' 'DEF' 'Gxx'

Python 2 では izip_longest の代わりに zip_longest .