0

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] であると予想していました

4

1 に答える 1

3

をヒットするまで4に、リストは[0, 1, 4, 9, 4, 5, 6, 7, 8, 9, 10]であり、最初の 3 つの要素が置き換えられています。あなたが期待しているように、インデックス5ではなく、インデックス2での最初の出現を.index()見つけます。同じことが言えます; ループの前の方で既に に置き換えており、代わりにを返します。4939L.index(9)310

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 に答える