我是python的新手.我在python中学习for循环的语法:
for var in list_name:
# do something
Run Code Online (Sandbox Code Playgroud)
我拿了一份清单:
list = [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
我想将它的每个元素加倍,所以我运行一个循环:
for i in list :
index = list.index(i)
list[index] = 2*i
print(list)
Run Code Online (Sandbox Code Playgroud)
然后打印:
[16,2,12,4,10,6,14,8,18]
Run Code Online (Sandbox Code Playgroud)
我不知道它为什么这样打印?
让我们来看看循环的前几次迭代.
迭代1:i是1.
index = list.index(i)
list[index] = 2*i
Run Code Online (Sandbox Code Playgroud)
index为0,list[0]设置为2*i.该列表现在看起来像[2, 2, 3, 4, 5, 6, 7, 8, 9].
迭代2:i是2.
index = list.index(i)
Run Code Online (Sandbox Code Playgroud)
list.index(2)找到2列表中第一个出现的位置,即索引0!不止一个2,你没有选择正确的.
list[index] = 2*i
Run Code Online (Sandbox Code Playgroud)
你加倍错误的元素!
这在迭代4,6和8上再次发生.
如果要将列表元素加倍,最简单的方法是创建一个包含列表推导的新列表:
l = [2*i for i in l]
Run Code Online (Sandbox Code Playgroud)
如果需要for循环中元素的索引,最好的方法通常enumerate是列表:
for i, item in enumerate(l):
whatever()
Run Code Online (Sandbox Code Playgroud)
此外,不要调用您的列表list,或者当您尝试调用该list函数时,您将得到一个奇怪的TypeError.