我正在尋找一個更好的解決方案,用於更改未知和變化深度的嵌套列表中的特定項目。動態更改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')
會做伎倆。
但是......坦率地說......我對這個解決方案並不滿意,必須有一種更流暢的Python方法來實現這一點。我可能錯過了一些東西。
任何人都可以想到更動態的方式,我不必預先定義可能級別的最大數量?
編輯:
在上面的例子中,我得到了我想要改變,這使得該方法列表中的指數似乎有點過於複雜。但是,在我的具體情況中,我實際上需要使用某個項目的索引來更改另一個具有相同結構的列表中的另一個項目。
所以我必須堅持使用索引列表。
有,它利用'遞歸'。谷歌搜索它會讓你遠遠,因爲你的情況是一個非常典型的例子。 –