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 という関数です。