在针对列表的循环中remove列表,该怎么做才不会越界?

在针对列表的循环中remove列表,该怎么做才不会越界?



[Copy to clipboard] [ - ]
CODE:
    for i in range(len(d)):
        f = re.search('\<exp([1-9]).*',d[i])
        if f!=None:
            buf.append(d[i])
            j = i
            while j<len(d):
                t = '<eg'+f.group(1)
                tt = re.search(t,d[j])
                if tt !=None:
                    buf.append(d[j])
                    d.remove(d[j])               
                j +=1         
        else:
            buf.append(d[i])
        i+=1

目的是依据要求改变序列d的循序,写入buf中去,问题是不想重复加入,于是想将d中某项加入后就去掉,但会报错:

[Copy to clipboard] [ - ]
CODE:
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in -toplevel-
    flag.remove(flag[0])
IndexError: list index out of range

知道是remove改变了len,不知道怎么做比较好?
想到办法了,不用remove,直接将d[j]='',这样再append也是加入空内容。不过,不知道还有什么好办法 没?怎样截短列表长度?
可以使用while循环。
...一大堆re型
看着头晕
呵呵 不懂perl
这不是perl,这是python。
del a[0]行吗?


QUOTE:
原帖由 limodou 于 2006-3-30 19:57 发表
这不是perl,这是python。

python中的re型可是从perl中引用过来的
将 buf 定义为集合就不怕重复加入了

>>> buf=set()
>>> buf.add('a')
>>> buf.add('b')
>>> buf.add('b')
>>> buf
set(['a', 'b'])


QUOTE:
原帖由 solaros 于 2006-4-4 14:49 发表


python中的re型可是从perl中引用过来的

它再引用也不是啊。那python还从c引用了好多东西,它是c吗?还从lisp引用了东西,它叫lisp吗?

别的语言也一样啊java从c++引用了东西,它叫c++吗?c#也从其它语言引入了东西它还能叫C#吗?
我也没说它是啊
。。。
因为我不懂perl所以不熟悉re型
但是不是说因为有了re型 python就=perl