目標:我有一個令牌列表。每當有一段由括號包圍的令牌時,例如{t1,t2等},我需要將它變成一個新的子列表。下面提供了一個我期望的結果的例子。在Python中解析令牌列表
解析:[ '(事實上)', 'DUP', '長度', '/ N', 'EXCH', 'DEF', '/事實', '{', '0', '''','','','','','','''''',' n','1','sub','fact','n','mul','}','ifelse','end','}','def','n','fact' ,'stack'])
返回: ['(facto)','dup','length','/ n','exch','def','/ fact',[0,' dict','begin','/ n','exch','def','n',2,'lt',[1],['n',1,'sub','fact',' n','mul'],'ifelse','end'],'def','n','fact','stack']
這是到目前爲止我的代碼:
def parse1(L):
newL = []
for x in L:
if x == '}':
return newL
elif x == '{':
newL.append(parse1(L[1:]))
else:
newL.append(x)
return newL
它的工作原理,以至於每當發生{我關禁傳列表的其餘部分進入功能再次,用時基本情況是發生}。這是行得通的,但是一旦它退出遞歸併創建一個子列表,它正在迭代的元素「x」還沒有超過這個部分。例如,如果我們的列表是:['{','1','}'],結果應該簡單地爲[[1]]。然而,發生的事情是返回[[1],'1'],因爲一旦它創建了子列表(似乎工作正常),循環正在經歷的下一個元素「x」實際上是該子列表的一個元素,它是緊跟在'{'之後的元素,根據我的代碼,它被添加到列表中。
我覺得這是一個非常簡單的解決方法,但我花了很長時間試圖弄清楚。正如我已經解釋的那樣,我理解這些問題,但不能在我的生活中弄清楚如何解決它。任何幫助將不勝感激!
這不是一個簡單的辦法;你正在處理一個子列表和處理列表的其餘部分。 –
我正在考慮嘗試在不使用for循環迭代器的情況下重新執行它,並嘗試手動遍歷列表,如L [0],L [1]等,然後嘗試找到更改索引的方法在我處理了一個子列表之後。 在這一點上,我只是非常疲憊的選擇,我花了一段時間在這個。 – Birdman
您的預期輸出似乎期望將整數字符串轉換爲整數,但您的代碼甚至不會嘗試執行此操作。 –