我无法理解for循环中的行为.index方法 (Python 3.3.1(v3.3.1:d9893d13c628,2013年4月6日,20:30:21)[MSC v.1600 64位(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]
答案 0 :(得分:3)
当您点击4
时,您的列表为[0, 1, 4, 9, 4, 5, 6, 7, 8, 9, 10]
,已替换前3个元素。 .index()
找到4
的第一次出现,在索引2处,而不是5,正如您所期待的那样。同样适用于9
;您已在循环中使用3
替换9
,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)]