いろいろ備忘録日記

主に .NET とか Java とか Python絡みのメモを公開しています。最近Go言語勉強中。

Pythonメモ-99 (リストの flatten 化)(list, itertools.chain, フラット化)

概要

よく忘れるのでメモ。

リストを flatten したい場合、便利なのが itertools.chain.from_iterableを使うと簡単にフラット化できます。

サンプル

"""
リストのサンプルです.

リストの flatten について

REFERENCES:: http://bit.ly/2L7yfq1
             http://bit.ly/2Li2N8S
"""
import itertools

from trypython.common.commoncls import SampleBase
from trypython.common.commonfunc import pr


class Sample(SampleBase):
    def exec(self):
        # サンプルデータ生成
        nested = [(chr(x), chr(x + 1)) for x in range(65, 70)]
        pr('nested', nested)

        # itertools.chain を使って flatten
        flattened = list(itertools.chain.from_iterable(nested))
        pr('flatten', flattened)

        # ついでに、並び順をキープしたままで重複削除 (python 3.7 以降で有効)
        dup_deleted = list(dict.fromkeys(flattened))
        pr('dup_deleted', dup_deleted)


def go():
    obj = Sample()
    obj.exec()


if __name__ == '__main__':
    go()

try-python/list02.py at master · devlights/try-python · GitHub

実行すると以下のようになります。

nested=[('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'E'), ('E', 'F')]
flatten=['A', 'B', 'B', 'C', 'C', 'D', 'D', 'E', 'E', 'F']
dup_deleted=['A', 'B', 'C', 'D', 'E', 'F']

最後の要素の順序キープしたままで重複削除は、以前にメモしていますので、よかったらどうぞ。

devlights.hatenablog.com


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com