Diary over Finite Fields

515ひかるが書き溜めたメモとコラムと雑記

続・リストのネストをいい感じに書きたいときの話

blog.515hikaru.net

これの続き。

いい感じのライブラリを見つけた

Twitter でこのブログ記事を紹介していただいた。

iogi.hatenablog.com

ここの後半に more-itertools というライブラリが紹介されているのだが、この more-itertools 内にある windowed という関数がまさしく求めているものだった。

github.com

実装もそんなに長くないので軽く眺めてみたが、難しくは全くないが正しく書くのはダルそうなコードだった。

簡単な紹介

インストールは pip でできる。

$ pip install more-itertools

前回の記事の例は(リストではなくタプルのままだが)以下のようなコードを書けばいい。

from more_itertools import windowed

for item in windowed(range(100), 4):
    print(item)

実行結果は下のような感じ。

(0, 1, 2, 3)
(1, 2, 3, 4)
(2, 3, 4, 5)
(3, 4, 5, 6)
(4, 5, 6, 7)
(5, 6, 7, 8)
(6, 7, 8, 9)
(7, 8, 9, 10)
(8, 9, 10, 11)
(9, 10, 11, 12)
(10, 11, 12, 13)
...(以下略)

こんな感じで使える。ほかにも地味に便利な関数が定義されていたりするので、APIリファレンスを軽く眺めておくと幸せになれるかもしれない。

More Itertools — more-itertools 3.2.0 documentation