2014/10/21

Python Tips:リストを指定した数の要素ごとにまとめたい

Pythonで、リストの要素を指定した数でグルーピングして返す方法をご紹介します。

最もシンプルなやり方は range でステップを指定しながらループを回してスライスする方法かと思います。
# 0, 1, 2, ... 14 のリストを作成
li = list(range(15))

# 要素を3つずつ順番にグループ化
group_by = 3
[li[i:i + group_by] for i in range(0, len(li), group_by)]
# => [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14]]
# 3 つずつに区切られたリストが返される

その他の方法としては、 iter 関数と zip 関数、スプラット演算子などを組み合わせて合わせ技で作る方法なんかもあります。
# 0, 1, 2, ... 14 のリストを作成
li = list(range(15))

group_by = 3
chunks = zip(*[iter(li)]*group_by)
print chunks
# => [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11), (12, 13, 14)]
ただ、この場合はなぜこうなるのか一目ではわからない感じです。。ほんの数文字の間にいろんな処理が挟まっていてテクニックとしては面白いのですが、、あくまでもトリック的な感じですかね。。

以上です。


参考
How do you split a list into evenly sized chunks in Python? - Stack Overflow
2. Built-in Functions — Python公式ドキュメント

0 件のコメント: