【问题标题】:index inside for loop in python 3.1python 3.1中for循环内的索引
【发布时间】:2013-06-11 06:25:26
【问题描述】:

我无法理解 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]

【问题讨论】:

    标签: for-loop python-3.x indexing


    【解决方案1】:

    当您点击4 时,您的列表是[0, 1, 4, 9, 4, 5, 6, 7, 8, 9, 10],已经替换了前三个元素。 .index() 发现4第一次 出现在索引 2,而不是 5,正如您所期望的那样。 9 也是如此;您已经在循环的前面用9 替换了3,并且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)]
    

    【讨论】:

    • 当然,接受。这个程序对我来说也不再是秘密了))
    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2018-03-16
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多