为什么我的变量决定列表中的一个项目变得超出范围?



所以,我正在研究一个函数,它将获取一个数据列表,并创建一个新的列表,其中包含在给定数字上重复的项。到目前为止,我在函数

中有这个while循环
def solution(data, n):
timesRepeated = n
lengthData = data.__len__()
j = 0
while (j <= lengthData):
num = data[j]
if (check(data, num, n)):
print("Thisimes")
data = (list(filter((num).__ne__, data)))
j = 0
lengthData = data.__len__()
if (j == lengthData):
break
j += 1

check()函数只检查num在列表中出现的次数是否超过n次,如果超过n次则返回True。它按预期工作,我只是在while循环中缺少一些东西

这是Google foobar测试,我不想知道函数的解,我只想知道为什么变量j超出了数据范围。我一直得到这个错误:"IndexError:列表索引超出范围"使用这个函数run: solution([1,2,3], 0).如果有人能帮助有抱负的pythonista,将不胜感激。

编辑:谢谢你的帮助,回头看,我意识到我的错误。我不知道我可以直接用<谢谢。另外,我刚刚谷歌了一下数据。len()'因为我不熟悉列表属性,所以我将替换它。第二个if,我将移除。预期的输出将是空的,因为所有项的出现次数都大于0。我还意识到'num = data[j]'并不准确,因为每次迭代长度都会改变。谢谢你的反馈,我将做出这些改变,并回答这个,如果它的工作

j <= lengthData将使j达到data中最后一个索引之外的值,即lengthData-1,因为Python列表索引是从零开始的。

while j < lengthData:代替

好了,我想我知道为什么num变量一直超出范围了。因为我要移除元素,所以这些元素的顺序会改变。因此,while循环运行的迭代次数越多,j就会越高,所以当数据为[1,2,3],n为0时,l总是大于0,这将是while循环的最终结果。谢谢所有的帮助和建议。我的工作还没有完成,但至少这个问题已经完成了。祝大家过得愉快

编辑:没关系,Barmar和Alain T是对的,这是因为<=不是<再次感谢>

最新更新