![【Python】List[List[str]] の指定はどういう意味?わかりやすく解説!](https://pythonaiclarifydoubts.com/wp-content/uploads/2025/06/Python.png)
Pythonで関数の引数や戻り値の型を明確にするために、型ヒント(Type Hint)を使うことが増えてきました。
その中でも List[List[str]]
という書き方は、「二重のリスト構造」でよく使われる型指定です。
この記事では List[List[str]]
の基本的な意味や使い方、活用シーン、注意点までをわかりやすく丁寧に解説します。
List[List[str]] とは?
List[List[str]] とは?
List[List[str]]
は、「文字列のリストを要素に持つリスト」を表します。
つまり、外側はリストで、その中の要素もさらにリストになっており、内側のリストの中身はすべて str
型(文字列)で構成されています。
構造的には 2次元の文字列リスト と考えるとわかりやすいです。
「行がリスト」「列が文字列」として扱えるため、表形式データの型指定に適しています。
たとえば次のようなデータは List[List[str]]
に一致します:
1 2 3 4 5 6 |
data = [ ["山田", "太郎", "東京"], ["鈴木", "花子", "大阪"], ["佐藤", "健", "福岡"] ] |
この場合、
- 外側のリストには 3 つの要素(3行分のデータ)があり、
- 各要素は「
["名前", "苗字", "都市"]
」のように、文字列だけで構成されたリストです。
したがって data
は List[List[str]]
型の値として正しい構造になります。
typing ライブラリの List
との関係
ここで書いている List
は、Python の標準ライブラリ typing
に含まれている「型ヒント用のクラス」です。
1 2 |
from typing import List |
をインポートして使います。
List[str]
: 文字列のリスト(例:["A", "B", "C"]
)List[int]
: 整数のリスト(例:[1, 2, 3]
)List[List[str]]
: 文字列のリストを要素に持つリスト(2次元の文字列リスト)
というように、リストの中にどんな型のデータが入っているかを明示できるのがポイントです。
Python自体は動的型付け言語なので、この指定がなくても動きますが、型ヒントをつけておくことで:
- コードの可読性が上がる
- 静的解析ツール(mypy など)で型チェックできる
- IDE(VS Code, PyCharm など)の補完がより正確になる
といったメリットがあります。
具体例①:引数に List[List[str]] を受け取る関数
以下のように、型ヒントを使って関数を定義できます。
1 2 3 4 5 6 |
from typing import List def print_rows(rows: List[List[str]]) -> None: for row in rows: print(" | ".join(row)) |
この関数は、「2次元の文字列リスト」を受け取って、1行ずつ表示する処理を行います。
実行例:
1 2 3 4 5 6 7 8 |
data = [ ["Name", "Age", "City"], ["Taro", "30", "Tokyo"], ["Hanako", "25", "Osaka"] ] print_rows(data) |
出力:
1 2 3 4 |
Name | Age | City Taro | 30 | Tokyo Hanako | 25 | Osaka |
具体例②:戻り値として List[List[str]] を返す関数
次は、CSVのような2次元データを返す関数の例です。
1 2 3 4 5 6 7 8 9 |
from typing import List def get_data() -> List[List[str]]: return [ ["ID", "Product", "Price"], ["001", "Book", "1200"], ["002", "Pen", "200"] ] |
この関数を呼び出せば、List[List[str]]
型のデータが得られます。
List[List[str]] が便利なシーン
List[List[str]]
は 「表形式のデータ」 をそのまま Python のリストで表現できる点が最大の強みです。
特に、複数行・複数列のデータを扱うときに役立ちます。
代表的な利用例は次のとおりです。
- CSVファイルのデータを読み書きする処理(1行ごとにリスト、複数行でリストのリスト)
- Google Sheets や Excel のような表形式データを扱う処理
- テーブル状のデータを分割して保持したいとき
多くの外部ライブラリでも、表形式のデータ構造は List[List[str]]
として受け渡す形式が一般的です。
そのため、データをやり取りする際の共通フォーマットとして覚えておくと便利です。
注意点:ネストの深さとデータ型に注意
便利な一方で、List[List[str]]
にはいくつか注意点もあります。
特に「リストの深さ」と「内側のデータ型」を正しく揃えることが重要です。
List[List[str]]
は2次元のリスト構造であり、List[str]
やList[int]
とはまったく別物です。- 内側のリストの要素が
str
以外(整数や None など)だと、型ヒント的には不正とみなされます。
例えば、次のようなケースは 不正な List[List[str]]
です。
1 2 3 4 5 |
data = [ ["田中", "40", "東京"], ["佐々木", 30, "大阪"] # ← 数字(int)が混在している ] |
このように異なる型が混ざる場合は、以下のように型を緩和して表現する必要があります。
- 内側を
List[Any]
とする - あるいは全体を
List[List[Union[str, int]]]
のように書く
つまり、データが完全に文字列だけで構成されているかを意識しながら設計するのがポイントです。
まとめ
今回は Python の型ヒント List[List[str]]
について詳しく解説しました。
List[List[str]]
は「文字列のリストを要素に持つリスト」を意味する- 2次元リストや表形式のデータを扱うときに便利
- 型ヒントとして関数の引数や戻り値に使うことで可読性と保守性が向上する
- 内側のリストのデータ型に注意が必要
データ構造を明示することでコードが読みやすくなり、型チェックツールや補完機能も強化されます。
特に複雑なデータを扱う場合には、積極的に List[List[str]]
を活用していきましょう。