python 列表变量类型中的潜在错误

-1 python list

我正在用“for循环”练习python“列表变量”,但惊讶地发现列表中项目的顺序发生了变化。

    xlist=[1,2,3,4,5]
    print(xlist)
    
    
    #loop all items in the lxist
    for item in xlist:
        print(item)
        
        #multiply each item by 5 
        xlist[xlist.index(item)] = item * 5
    
        #print the list
        print(xlist)
Run Code Online (Sandbox Code Playgroud)

我期待列表顺序是,[5,10,15,20,25]但我得到了[25, 10, 15, 20, 5]

我正在使用 pycharm IDE 使用 python 3.8(32 版本)。

任何人都可以澄清为什么列表的顺序发生了变化

jua*_*aga 5

您没有.index正确使用该方法。两个问题,从语义上讲,它并不意味着您认为它意味着什么,它为您提供了列表中某个对象的第一个索引。所以请注意,在您的最后一次迭代中:

xlist.index(5) == 0
Run Code Online (Sandbox Code Playgroud)

因为在您的第一次迭代中,您设置了:

xlist[0] = 1 * 5
Run Code Online (Sandbox Code Playgroud)

执行此操作的正确方法是在迭代时维护和索引,或者通过index = 0在循环外使用类似的东西手动增加它,或者通过在一个范围内迭代并使用该索引提取项目。但是 Pythonic 的方法是使用enumerate,它会在您循环时自动提供一个计数器:

for index, item in enumerate(xlist):
    xlist[index] = item*5
Run Code Online (Sandbox Code Playgroud)

另一个问题是,即使你的项目都是独特的,返回的索引是正确的,用.index在一个循环中被不必要地使你的算法二次的时间,因为.index需要线性时间。