Python:列表索引超出范围,但列表中有项目吗?
我试图将18个列表项添加到一个3文本文件中,每个列表项6个<代码>路径[0]和Python:列表索引超出范围,但列表中有项目吗?,python,list,Python,List,我试图将18个列表项添加到一个3文本文件中,每个列表项6个路径[0]和路径[1]文本文件正确,但第三个路径[2]仅获取3项 mainStudents = ["1 Name Surname D1", "2 Name Surname D2" ...16x] def randomize(path): count = 0 currentpathIs = getprojdir + "\\" + "\shuffled" + path print(currentpathIs)
路径[1]
文本文件正确,但第三个路径[2]
仅获取3项
mainStudents = ["1 Name Surname D1", "2 Name Surname D2" ...16x]
def randomize(path):
count = 0
currentpathIs = getprojdir + "\\" + "\shuffled" + path
print(currentpathIs)
with open(currentpathIs, "a+") as file:
while True:
try:
file.write(mainStudents[count] + "\n")
del(mainStudents[count])
print(count)
count += 1
except Exception as e:
print(mainStudents)
break
if count == 6:
break
randomize(paths[0])
randomize(paths[1])
randomize(paths[2])
我得到了这个错误:
回溯(最近一次呼叫最后一次):
文件“C:\Users\user\Desktop\New folder\python.py”,第53行,随机排列(路径[2])
文件“C:\Users\user\Desktop\New folder\python.py”,第43行,随机排列
file.write(主体学生[计数]+“\n”)
索引器:列表索引超出范围
但是在
mainStudents
列表中还有3个项目?您的问题是,当您从列表中删除该项目时,您正在减小其大小。因此,您的计数将递增,然后尝试访问不再存在的索引。举一个非常简单的例子,只需要一个大小为2的列表:
mainStudents = ["1 Name Surname D1", "2 Name Surname D2"]
现在,当您调用您的方法时,将会发生什么,第一次迭代将起作用,因为您将访问mainStudents[0]
但是,在第二次迭代中,您已经从列表中删除了该项,因此现在您的列表如下所示:
['2 Name Surname D2']
它现在是一个大小为1的列表,其索引访问权限为0
因此,while循环的下一次迭代将在1
处进行count
。因此,这正是您的索引器的来源
决定使用列表中的while
循环和del
项的组合是导致问题的原因。取而代之的是,选择您想要迭代的内容,从逻辑上看,它似乎是mainStudents
。那么为什么不干脆这样做呢
def randomize(path):
currentpathIs = getprojdir + "\\" + "\shuffled" + path
print(currentpathIs)
with open(currentpathIs, "a+") as file:
for student in mainStudents:
file.write(student + "\n")
通过使用可用的字符串方法,join
,将列表转换为一个由\n
分隔的字符串,您可以进一步简化这一过程:
'\n'.join(mainStudents)
此外,还有一些方法可以帮助创建路径。看看这个模块。更具体地说,os.path.join
。因此,您的代码可以进一步简化为:
from os.path import join
def randomize(path):
currentpathIs = join(getprojdir, shuffled, path)
with open(currentpathIs, "a+") as file:
file.write('\n'.join(mainStudents))
在哪里初始化mainStudents
?mainStudents
是全局的?什么是mainStudents
的值?mainStudents
是全局的,它类似于:mainStudents=[“1名姓氏D4”,…17更多]
@suayipuzulmez请更新您的问题,并添加初始化和填充主流学生的代码部分