Python 我真的不知道什么超出了范围

Python 我真的不知道什么超出了范围,python,Python,我不断地犯这个错误,我甚至不知道是什么错了,因此,我从数组temp中得到一些随机索引,它只保存从0到lenstudents_grades的整数,然后我转到students_grades,得到我刚得到的索引值,并将其存储在名为cluster->have两个属性centroid和personals的对象中 我想做的是,我想从数组temp中生成一些随机索引,然后从数组students\u grades中获取这些索引的值,然后我想从students\u grades中删除这些索引。有人能帮忙吗 data

我不断地犯这个错误,我甚至不知道是什么错了,因此,我从数组temp中得到一些随机索引,它只保存从0到lenstudents_grades的整数,然后我转到students_grades,得到我刚得到的索引值,并将其存储在名为cluster->have两个属性centroid和personals的对象中

我想做的是,我想从数组temp中生成一些随机索引,然后从数组students\u grades中获取这些索引的值,然后我想从students\u grades中删除这些索引。有人能帮忙吗

data=pd.read\u csvCourseEvaluation.csv,header=None 学生成绩=[] 对于范围1511中的i: 学生们在1,21范围内为j添加[floatdata.values[i,j] k=Intinpunter有多少个群集: 索引=numpy.random.choicetemp,k,False 初始_集群=[] 对于0范围内的i,列宁骰子: 打印产品编号:,索引[i]+1 cluster=Clusterstudents_成绩[指数[i]], 学生成绩[指数[i]] 学生成绩指数[i] 初始_clusters.appendcluster 错误:

Traceback (most recent call last):
  File "", line 103, in <module>
    cluster = Cluster(students_grades[indices[i]], students_grades[indices[i]])
IndexError: list index out of range

您可能需要重新组织代码- 无论如何,我不能百分之百地肯定,但我猜你的问题是:你正在制作一个随机索引数组,命名索引,具有潜在的最大值temp-1,它可能出现在数组中的任何一点,但只出现一次:

indices = numpy.random.choice(temp, k, False)
下一步,你循环这些索引,每一步你都在缩小学生的分数列表: 学生成绩指数[i]

因此,假设开始时temp=lenstudents\u grades,在i步之后,students\u grades的长度仅为temp-i,但从索引数组中获取的索引可以高达temp-1,因此可以获取索引越界错误。 要纠正这一点,请记住

indices = numpy.random.choice(temp, k, False)
这意味着您不会两次获得相同的索引,因此没有必要从学生的成绩中删除索引处的值

顺便说一句,一些一般的python风格建议:而不是

for i in range(len(some_list)):
    stuff with some_list[i]
你可以用

for element in some_list:
    stuff with element

更具可读性的“pythonic”代码-

很难说,因为你的代码片段没有定义学生的分数。变量学生的分数里面是什么?只需打印列宁骰子和lenstudents的分数,你就会知道为什么学生的分数是数组的数组,而内部数组是浮动的。如果说它们是浮动,这并不能回答问题的意图,这是为了发现它包含多少个浮点数。谢谢你的建议,但问题是:index=numpy.random.choicetemp,k,False只在for循环中调用,该循环从0循环到基本上是k的列宁骰子,k不可能大于lenu的分数,所以不太可能发生。。感谢您的帮助@AhmadEbrahim噢对不起,我完全预料到内部for循环是一个缩进错误,但在这种情况下,学生的分数永远不会包含多个元素,因为在相同的最低级别for循环中,您添加了一个元素,并删除了至少一个元素。事实上,这可能就是问题所在:添加一个元素,然后尝试删除k个元素