为什么循环不能像Python中预期的那样打印?

sdr*_*eam 0 python list

我是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)

我不知道它为什么这样打印?

use*_*ica 6

让我们来看看循环的前几次迭代.

迭代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.