在python列表中多次出现相同的事情

时间:2014-02-21 02:57:05

标签: python list

我正在尝试在python中实现一个postscript解释器。对于程序的这一部分,我试图访问列表中多次出现的相同元素,但函数调用不会这样做。我可以用代码更好地解释它。

此循环逐步执行标记列表

for token in tokens:
    process_token(token)

标记定义为:

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

所以在这之后,令牌看起来像['/ three','3','def','/ four','4','def']。

进程令牌将继续将事物推送到堆栈,直到达到要完成的操作,在本例中为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)

问题是当它向字典添加{'three':3}时,它应该继续阅读并将{'four':4}添加到字典中。但是当调用handle_def (tokens.index(t)-2, tokens.index(t)-1)时,它会传入第一次出现def的索引号,这意味着它只会将{'three':3}再次放入字典中。我希望它跳过第一个并转到后面出现的单词def。我该怎么做呢?

很抱歉很长的帖子,但我觉得需要解释。

1 个答案:

答案 0 :(得分: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)
    ...