Pythonで複雑なデータ型(リスト・タプルなど)を含む行を抽出する方法
Pythonでは、ネストされたデータ構造の中から、リストやタプル、辞書、セットといった複雑なデータ型を含む行だけを抜き出したいケースがあります。このような場合、組み込み関数の isinstance() とリスト内包表記を組み合わせることで、シンプルかつ効率的に処理できます。
サンプルコード
以下は、実際の動作を示した例です。
my_list = [[13, 1, 35], [23, [44, 54], 85], [66], [75, (81, 2), 29, 7]]
my_result = [row for row in my_list if any(isinstance(element, list) or isinstance(element, tuple) or isinstance(element, dict) or isinstance(element, set) for element in row)]
print("元のリスト :")
print(my_list)
print("抽出結果のリスト :")
print(my_result)実行結果
元のリスト : [[13, 1, 35], [23, [44, 54], 85], [66], [75, (81, 2), 29, 7]] 抽出結果のリスト : [[23, [44, 54], 85], [75, (81, 2), 29, 7]]
コードの解説
- まず、複数のリストを要素として持つリスト(リストのリスト)を定義し、その内容をコンソールに表示します。
- 次に、リスト内包表記を使って各行を順番に走査し、
isinstance()メソッドで各要素がリスト型かどうかを判定します。この例では、タプル・辞書・セットについても同様にチェックしています。 any()関数により、行の中に1つでも複雑なデータ型が含まれていれば条件がTrueとなり、その行が抽出対象となります。- 抽出された結果は変数に代入され、最後にコンソールへ出力されます。
より簡潔に書くテクニック
isinstance() の第2引数にはタプルを渡せるため、複数の型をまとめて判定できます。これを利用すると、先ほどのコードは以下のようにすっきりと書き換えられます。
my_result = [row for row in my_list if any(isinstance(element, (list, tuple, dict, set)) for element in row)]
この書き方なら、判定したい型を追加する場合もタプルに要素を加えるだけで済むため、保守性の高いコードになります。
-
Pythonでリスト内の数値を合計する方法(文字列型の数値を含む)
このチュートリアルでは、リスト内のすべての数値を合計するプログラムを作成します。リストには整数型だけでなく、文字列形式の数値も混在している場合があります。まずは以下の例を見てみましょう。入力例random_list = [1, '10', 'tutorialspoint', '2020', 'tutorialspoint@2020', 2020]出力例4051プログラムは、以下の手順に従って作成します。リストを初期化します。変数 total を 0 で初期化します。リストを反復処理します。要素が数値であるかどうかを、次の2つの条件
-
Pythonの標準データ型を徹底解説!5つの基本型の特徴と使い方
コンピュータのメモリに保存されるデータには、さまざまな種類があります。例えば、人の年齢は数値として、住所は英数字の文字列として保存されます。Pythonでは、データに対してどのような操作が可能か、またそれぞれどのように保存されるかを定義するために、複数の標準データ型が用意されています。 Pythonには、主に以下の5つの標準データ型があります。 数値(Numbers) 文字列(String) リスト(List) タプル(Tuple) 辞書(Dictionary) Pythonの数値(Numbers) 数値型は、数値データを格納するためのデータ型です。変数に値を代入すると、その時点で数値オブ