我正在用“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 版本)。
任何人都可以澄清为什么列表的顺序发生了变化
您没有.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需要线性时间。
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |