Python:列表索引超出范围,但列表中有项目吗?

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)

我试图将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)
    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请更新您的问题,并添加初始化和填充主流学生的代码部分