繁体   English   中英

Python List IndexError:列表索引超出范围

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM