PYTHON MEBY

Pythonでリストを平坦化(itertools.chain.from_iterable, リスト内包表記のネスト)

この記事では、Pythonでネストしたリストを平坦化する方法を解説します。itertools.chain.from_iterableとリスト内包表記を使った2つの方法を例題とともに紹介します。

目次

itertools.chain.from_iterableを使った平坦化

itertools.chain.from_iterableは、複数のイテラブルオブジェクトを連結して一つのイテラブルオブジェクトにする関数です。ネストしたリストを平坦化するには、この関数が非常に便利です。

import itertools

nested_list = [[1, 2, 3], [4, 5], [6]]
flat_list = list(itertools.chain.from_iterable(nested_list))
print(flat_list)  # 出力: [1, 2, 3, 4, 5, 6]

itertools.chain.from_iterable関数は、ネストの深さがいくつであっても対応できます。ただし、深さが深いほど処理速度は遅くなる可能性があります。

リスト内包表記を使った平坦化

リスト内包表記を用いると、より簡潔にリストを平坦化できます。ただし、ネストの深さが増えるとコードが複雑になる可能性があります。

nested_list = [[1, 2, 3], [4, 5], [6]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list)  # 出力: [1, 2, 3, 4, 5, 6]

リスト内包表記は、可読性が高く、シンプルなネストの場合に適しています。深すぎるネストには向いていません。

どちらの方法を選ぶべきか?

ネストの深さやリストのサイズ、コードの可読性を考慮して、適切な方法を選択しましょう。 シンプルなネストで可読性を重視するならリスト内包表記、深くなっているネストや、より汎用的な処理をしたい場合はitertools.chain.from_iterableが適しています。

まとめ

この記事では、Pythonでネストしたリストを平坦化する方法として、itertools.chain.from_iterableとリスト内包表記の2つの方法を紹介しました。それぞれの方法の長所と短所を理解し、状況に応じて適切な方法を選択することで、より効率的で可読性の高いコードを作成することができます。

関連記事