ネストされたリストを深くフラット化する

PythonPythonBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Python では、リストには他のリストを要素として含めることができ、それらのリストにはさらに他のリストを要素として含めることができ、ネストされた構造を形成します。ネストされたリストをフラット化するプロセスとは、それを一次元リストに変換することを意味し、すべての要素が同じレベルにあります。このチャレンジでは、再帰的にすべてのネストされたリストをフラット化する、つまり深くフラット化する関数を書くよう求められます。

深くフラット化されたリスト

引数としてリスト lst を受け取り、lst の深くフラット化されたバージョンである新しいリストを返す関数 deep_flatten(lst) を書きます。この関数は再帰を使用し、要素が反復可能かどうかを確認するために collections.abc.Iterable を使った isinstance() 関数を使用する必要があります。要素が反復可能な場合、関数は再帰的に deep_flatten() をその要素に適用する必要があります。それ以外の場合、関数はその要素のみを含むリストを返す必要があります。

from collections.abc import Iterable

def deep_flatten(lst):
  return ([a for i in lst for a in
          deep_flatten(i)] if isinstance(lst, Iterable) else [lst])
deep_flatten([1, [2], [[3], 4], 5]) ## [1, 2, 3, 4, 5]

まとめ

このチャレンジでは、再帰と collections.abc.Iterable を使った isinstance() 関数を用いて、リストを深くフラット化する方法を学びました。この技術は、リストのリストなどのネストされたデータ構造を扱う際に役立つ場合があります。