[英]Python List IndexError: list index out of range
我尝试在列表中搜索元素的最大频率。
现在,我遇到的问题是列表(a [i + 1])的最后检查的元素得到了IndexError。 我怎么解决这个问题?
使用len(a)-1时,永远不会使用最后一个元素a [i + 1],因此maxMode(a4)的结果是错误的。
a1 = [5,3,6,7,2,7,3,6,2,8,7]
a2 = [5,3,6,7,2,7,3,6,2,8,7,5,2]
a3 = [5,3,6,7,2,7,3,6,2,8,2,5,2]
a4 = [5,3,6,7,2,7,3,6,2,7,2,5,1]
def maxMode(a):
cnt = 1
maxCnt = 0
res = 0
for i in range(len(a)-1):
if a[i] == a[i+1]:
cnt += 1
else:
if cnt >= maxCnt:
maxCnt = cnt
res = a[i]
cnt = 1
return res
a1.sort()
a2.sort()
a3.sort()
a4.sort()
print(a1)
print(maxMode(a1))
print(a2)
print(maxMode(a2))
print(a3)
print(maxMode(a3))
print(a4)
print(maxMode(a4))
正如BluCode所指出的那样,您的代码可以在您提供的4个测试用例中正常运行(或者至少不会崩溃并返回一个模式,尽管您指出,对于第4个测试,它不是最大模式)。 另外,正如您所暗示的,您没有在计算最后一个元素(或者实际上,您不是在检查最后一批是否可能是最大数量),所以如果a4是:[1、2、2、2, 3、3、5、5、5、6、6、7、7、7、7],则错误地打印出2(因为它发现3 2和3 7并没有对7的好坏做出最终检查或更好)
以下适用于我的4个更新的测试用例:
a1 = [5,3,6,7,2,7,3,6,2,8,7]
a2 = [5,3,6,7,2,7,3,6,2,8,7,5,2]
a3 = [5,3,6,7,2,7,3,6,2,8,2,5,2]
a4 = [5,3,6,7,2,7,3,6,2,7,2,5,1,7]
def maxMode(a):
cnt = 1
maxCnt = 0
res = 0
for i in range(len(a)-1):
if a[i] == a[i+1]:
cnt += 1
else:
if cnt >= maxCnt:
maxCnt = cnt
res = a[i]
cnt = 1
if cnt >= maxCnt:
maxCnt = cnt
res = a[i]
return res
a1.sort()
a2.sort()
a3.sort()
a4.sort()
print(a1)
print(maxMode(a1))
print(a2)
print(maxMode(a2))
print(a3)
print(maxMode(a3))
print(a4)
print(maxMode(a4))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.