2014-02-21 21 views
1

我試圖在python中實現postscript解釋器。對於程序的這一部分,我試圖訪問列表中同一元素的多次出現,但函數調用不會這樣做。我可以用代碼更好地解釋它。在Python列表中多次發生相同的事情

通過令牌

for token in tokens: 
    process_token(token) 

標記列表這個循環步驟是定義爲:

line = "/three 3 def /four 4 def" 
tokens = line.strip().split(" ") 

所以經過這樣做了記號的樣子[ '/三', '3',' def','/ four','4','def']。

過程令牌將繼續將事物推到堆棧上,直到達到要完成的操作,在這種情況下爲def。一旦它到達變形點焊將執行:

if (t == "def"): 
    handle_def (tokens.index(t)-2, tokens.index(t)-1) 
    stack.pop() 

,這裏是handle_def():

def handle_def (t, t1): 
name = tokens[t] 
defin = tokens [t1] 
x=name[1:] 
dict1 [x]= float(defin) 

當它完成添加問題是{「三化」:3}到字典,它那麼應該繼續閱讀並在字典中添加{'four':4}。但是當調用​​時,它會傳入第一次出現def的索引號,這意味着它只會將{'three':3}再次放入字典中。我希望它跳過第一個詞,然後去掉def這個詞的後面的部分。我該如何做到這一點?

對不起,很長的文章,但我覺得它需要解釋。

回答

0

list.index將僅給出列表中的第一次出現。您可以使用enumerate函數獲取正在處理的當前項目的索引,如下所示:

for index, token in enumerate(tokens): 
    process_token(index, token) 
... 
... 
def process_token(index, t): 
    ... 
    if t == "def": 
     handle_def (index - 2, index - 1) 
    ... 
+0

非常感謝您解決了這個問題。 – killermist

+0

@Finalreq請考慮[接受此答案](http://meta.stackexchange.com/a/5235/235416)如果它可以幫助你。 – thefourtheye

+0

我會的,但它說我必須等待4分鐘。 – killermist

相關問題