Python列表索引奇怪的行为

时间:2012-06-13 22:18:50

标签: python list jython

我有一段代码在以下list.index函数中以某种方式失败:

for line in flines:
    for match in bad_data_regex.findall(line):
        assert line in flines
        index = flines.index(line)
        flines.pop(index)
        # other code that does not modify flines ....

我的代码失败了:

ScriptEngine.execute:Error in script Traceback (innermost last):
  File "<string>", line 168, in ?
ValueError: list.index(x): x not in list

如果值真的不在列表中,我应该在AssertionError函数之前得到list.index

我在Java版本1.6.0_18下使用Jython 2.2.1。

这怎么可能?

编辑:

原来产生错误的代码不是我上面发布的。我的Jython解释器给了我错误的行号,并且恰好落在了上面的索引函数的行上。

上面的代码确实按照我的意图工作,虽然我意识到在迭代它时修改列表并不是最好的做法。我将尽力避免在将来发生这种情况。

1 个答案:

答案 0 :(得分:3)

这可能是因为flines.pop(index)部分而发生的。在迭代它时更改列表总是一个坏主意。

考虑这个例子:

In [1]: a = range(5)

In [2]: for i in a:
   ...:     print a.pop()
   ...: 
4
3
2

In [3]: a
Out[3]: [0, 1]