我有一個遞歸構建的函數(該函數在具有嵌套分區的表的SQL查詢中查找所需的組件部分)。該表看起來是這樣的,如果有2個分區等級(在這種情況下,的某些地方和themonth):如何有效地改變未知深度列表中最右邊的值?
[[['theyear', '>=', 2014], ['OR'], ['theyear', '==', 2014, 'AND', [['themonth', '>=', 8], ['OR'], ['themonth', '==', 8, 'AND', False]]]], [['theyear', '<=', 2015], ['OR'], ['theyear', '==', 2015, 'AND', [['themonth', '<=', 9], ['OR'], ['themonth', '==', 9, 'AND', False]]]]]
我希望做的是簡化
['themonth', '>=', 8], ['OR'], ['themonth', '==', 8, 'AND', False]
得到的只是:
['themonth', '==', 8]
但是,嵌套列表可以是任意深度的(例如,一個表可以按'theyear','themonth','theday','thehour'分區)。我知道在這個例子中深度= 2,但我很努力地想出如何自動改變mylist [0] [ - 1] [ - 1] ...的值並改變mylist [0] [ - 1] [-1] [ - 1] [ - 1]如果depth = 4。
更簡單的方法來這樣說,是,如果我有
a = [3, [4, [5]]]
我知道深度爲3,我不能只用一個while循環基本上做
b = a[-1]
b = b[-1]
b = [6]
>>> a
[3, [4, [5]]]
如何我可以定義一個函數來改變最右邊的值嗎?
我應該添加警告:您需要確保您的輸入不包含自引用。 'l = []; l.append(升); get_rightmost(l)'不會終止,因爲深度是無限的。在你的情況下,這可能不會發生,但如果有人使用這個未經檢查的用戶輸入:你已被警告:-) – cg909