python insert indexerror:list index超出范围

时间:2017-06-12 00:15:11

标签: python

我现在按顺序保存图像1 ... 10 我的第一个代码如下。

name=[]
fullname=[]
for i in range(1,11):
    name.insert(i,i)
    fullname=os.path.join(save_path,str(name[i]+".png")
    img.save(fullname[i])

但在此代码中,图像文件仅保存为“9.png”。

所以我改变了方式。

{{1}}

现在,有一个indexerror:list index超出范围。

我需要帮助。请。

4 个答案:

答案 0 :(得分:0)

Python是零索引的。您的插入确实位于列表的末尾,但由于1, 2, 3位于0, 1, 2位置,因此您无法正确检索它们。最快的解决方法是以不同的方式定义name - 而不是空列表:

name = [None]  # Or any other arbitrary value

这样,索引0处的某些内容永远不会被使用,但是允许您在索引1处插入1,然后在2处插入2,依此类推。

这可能会在您的代码中显示另一个错误。您在fullname=os.path.join(save_path,str(name[i]+".png")行上错过了一个右括号,这可能只是将其复制错误。确保括号在name[i]之后,如下所示:

fullname = os.path.join(save_path, str(name[i]) + ".png")

编辑:由于您的代码确实在运行,因此该括号必须位于某处。请编辑您的问题以告诉我们它的位置。

答案 1 :(得分:0)

第一种方式的问题可能是因为最后一行没有完全标记:

f(1)

但是第二种方式的问题是,当列表中没有任何内容时,您尝试在索引f(x-1)处插入内容。要解决此问题,请执行以下操作:

save_path='/home/imagefolder'
for i in range(1,11):
    name=i
    fullname=os.path.join(save_path,str(name)+".png")

或者使用1等内容初始化name=[] fullname=[] for i in range(10): name.insert(i,i+1) fullname=os.path.join(save_path,str(name[i]+".png") img.save(fullname[i])

答案 2 :(得分:0)

您可以在字符串中添加数字(从1到10),如下例所示:

方法1:

name=[]
string="img"
for i,j in enumerate(range(10),1):
    name.append(string+str(i))
print(name)
# Output -> ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9', 'img10']

方法2:

name=[]
string="img"
n=1
for i in range(10):
    name.append(string+str(n))
    n += 1
print(name)
# Output -> ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9', 'img10']

方法3:

name=[]
string="img"
n=1
for i in range(10):
    name.insert(n,string+str(n))
    n +=1
print(name)
# Output -> ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9', 'img10']

方法4:

name=[]
string="img"
for i,j in enumerate(range(10),1):
    name.insert(i,string+str(i))
print(name)
# Output -> ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9', 'img10']

在你的第一个代码中:你写道:

save_path='/home/imagefolder'
for i in range(1,11):
    name=i
fullname=os.path.join(save_path,str(name)+".png")

但这不是正确的输入:尝试编写如下代码。

save_path='/home/imagefolder'
fullname = []
n=1
for i in range(10):
    fullname.append(os.path.join(save_path,str(n)+".png"))
    n += 1
print(fullname)
# ['/home/imagefolder\\1.png', '/home/imagefolder\\2.png', '/home/imagefolder\\3.png', '/home/imagefolder\\4.png', '/home/imagefolder\\5.png', '/home/imagefolder\\6.png', '/home/imagefolder\\7.png', '/home/imagefolder\\8.png', '/home/imagefolder\\9.png', '/home/imagefolder\\10.png']

#or use the below one.

save_path='/home/imagefolder'
fullname = []
for i,j in enumerate(range(10),1):
    fullname.append(os.path.join(save_path,str(i)+".png"))
print(fullname)
# ['/home/imagefolder\\1.png', '/home/imagefolder\\2.png', '/home/imagefolder\\3.png', '/home/imagefolder\\4.png', '/home/imagefolder\\5.png', '/home/imagefolder\\6.png', '/home/imagefolder\\7.png', '/home/imagefolder\\8.png', '/home/imagefolder\\9.png', '/home/imagefolder\\10.png']

答案 3 :(得分:0)

您收到KeyError因为list为空,当index为空时您无法分配给特定list。要解决此问题,您可以使用list值初始化None,然后在looping时替换它们:

name = [None] * 11  # initialize the list with None values

并在循环中使用:

name[i] = i

例如:

name= [None] * 11
fullname=[None] * 11
for i in range(1,11):
    name[i-1] = i
    fullname[i-1] = os.path.join(save_path,str(name[i-1])+".png")
    img.save(fullname[i-1])

虽然,你必须从索引0开始,所以name[i-1] = i更好。或者您可以使用name.append(i),因为它将以与for循环相同的顺序附加。