【发布时间】:2015-11-10 13:17:37
【问题描述】:
这是一个很难解释的问题。我在玩 Python 的列表方法,尤其是 del 索引对象。我想创建一个简单的脚本,它会创建一个从 1 到 100 的整数列表,然后是一个 for 循环,它会从列表中删除奇数。
这是我写的脚本:
def main():
num = list(range(1,101))
print(num)
for i in range(0,101):
del num[i]
print(num)
main()
似乎可以正常工作?我也是这么想的,直到我运行它。
我不知道为什么,但是当i 被传递给del num[i] 索引时,数字本身翻了一番。
当我运行它时,我收到了IndexError: list assignment index out of range。
当我将参数从range(0,101)更改为range(0,10)时,我发现它删除了从1到20的所有奇数。
换句话说,索引中的i 在不应该的时候翻了一番。我可以得到一些有关这方面的信息吗?
【问题讨论】:
-
现在您学到了重要的编程课程:不要在迭代时修改它们。 :)
-
除非你能,在诸如 go 之类的语言中:)
-
这是我对最近一个问题的回答,可能有用:stackoverflow.com/questions/32043963/…
-
@FilipHaglund,嗯,你确定吗?什么意思?
-
它对传递给
range的变量的副本进行操作,但由于切片是指向底层数组的指针,因此它没有按我的预期工作。我的坏:)
标签: python list for-loop indexing del