0

我无法理解 for 循环中的行为 .index 方法(Python 3.3.1 (v3.3.1:d9893d13c628, Apr 6 2013, 20:30:21) [MSC v.1600 64 bit (AMD64)] on win32)

L = [e for e in range(11)]
print(L)
for e in L[:]:
    print(e, L.index(e))
    L[L.index(e)] *= e
print(L)

输出:

>>> 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0 0
1 1
2 2
3 3
4 2
5 5
6 6
7 7
8 8
9 3
10 10
[0, 1, 16, 81, 4, 25, 36, 49, 64, 9, 100]
>>> 

我期待最终列表 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4

1 回答 1

3

当您点击 时4,您的列表[0, 1, 4, 9, 4, 5, 6, 7, 8, 9, 10]已经替换了前 3 个元素。如您所料,在索引 2 处而不是 5 处.index()找到 的第一次4出现。也一样9;您已经在循环中替换39前面并L.index(9)返回3而不是10.

不要list.index()在不断变化的列表中使用;改用enumerate()

L = [e for e in range(11)]
print(L)
for i, e in enumerate(L[:]):
    print(e, i)
    L[i] *= e
print(L)

然后导致:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

您可以[e for e in range(11)]用一个简单的list(range(11)). 您可以将整个脚本替换为:

[e * e for e in range(11)]
于 2013-06-14T14:54:05.363 回答