未知の深度のネストされたリスト内の特定のアイテムを変更するためのより良いソリューションを探しています。Pythonで深さが不明なネストされたリスト内の特定のアイテムを動的に変更します
私はリストlst = ['a', 'b', [['c'], ['d', ['e', 'f']]]
を持っており、'e'
を'x'
に変更したいとします。 私は単純にハードコーディングすることによってこれを行うことができます:
lst[2][1][1][0] = 'x'
しかし、私は別の項目を変更する指標の未知の番号を使用する必要があると思います。例えば、'c'
を変更すると、3つのインデックスしか必要としません。
私はすでに特定のアイテムの希望インデックスを返す関数を書いて、それが少しよりダイナミックにするために、この場合にはindices = get_indices('e', lst)
がリストに[2, 1, 1, 0]
を返しますので、私の現在のソリューションは、次の関数です。
def set_element(lst, index, value):
levels = len(index)
if levels == 1:
lst[index[0]] = value
elif levels == 2:
lst[index[0]][index[1]] = value
elif levels == 3:
lst[index[0]][index[1]][index[2]] = value
elif levels == 4:
lst[index[0]][index[1]][index[2]][index[3]] = value
elif levels == 5:
lst[index[0]][index[1]][index[2]][index[3]][index[4]] = value
elif levels == 6:
lst[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]] = value
else:
return False
return True
set_element(lst, indices, 'x')
を呼び出すと、トリックを行うだろう。
しかし... ...私はこの解決策には満足していません。これを達成するためには、よりスムーズで無色の方法が必要です。私はおそらく何かが欠けているでしょう。
可能なレベルの最大数を事前に定義する必要がない、もっとダイナミックな方法を誰もが考えることができますか?
EDIT:上記の例で
私はこの方法は少し過度に複雑思われてしまうた、私が変更したいのですが、リストからインデックスを持っています。しかし、私の具体的なケースでは、実際には、同じ構造の別のリスト内の別の項目を変更するために項目のインデックスを使用する必要があります。
私はインデックスのリストを使用することを主張する必要があります。
「再帰」を利用しています。あなたの事件は非常に典型的なものであるので、それをグーグルで探そうとします。 –