環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Pythonのリストの深さを再帰的に計算する:空のリストの扱いに注意しよう

最終更新日 2023.02.18

Python は入れ子になったリストをよく扱うため、リストの深さを知りたい場合がよくあります。リストがどうかを再帰的にチェックすると深さを計算できます。

def depth(k):
    if not k:
        return 0
    else:
        if isinstance(k, list):
            return 1 + max(depth(i) for i in k)
        else:
            return 0

この関数はリストの深さを整数値で返します。いろいろなリストで試してみましょう。

a1 = []
a2 = ['a']
a3 = ['a', ['b']]
a4 = ['a', []]
a5 = [['a', 'b', 'c'], [1, [2, 3]], ['x', 'y']]

print(depth(a1))  # 0
print(depth(a2))  # 1
print(depth(a3))  # 2
print(depth(a4))  # 1
print(depth(a5))  # 3

空のリストは深さが 0 です。

Stack Overflow の Counting depth or the deepest level a nested list goes to の回答は素晴らしい関数を紹介していますが、リストが空だったときにエラーが起きます。その問題を解消したものが上にあげた depth という関数です。