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

2024-06-28 11:35:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在列表中搜索一个元素的最大频率。你知道吗

现在我有一个问题,列表的最后一个选中元素(a[I+1])得到了一个索引器。我怎样才能解决这个问题?你知道吗

对于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))

Tags: a2元素列表lenifa1ressort
1条回答
网友
1楼 · 发布于 2024-06-28 11:35:14

正如BluCode所指出的,对于您提供的4个测试用例,您的代码运行良好(或者至少,它不会崩溃并返回一个模式,尽管正如您所指出的,对于第4个测试,它不是max模式)。另外,正如你提到的,你没有计算你的最后一个元素(或者实际上,你没有检查最后一批是否可能是最大的),所以如果a4是:[1,2,2,2,3,3,5,5,6,6,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))

相关问题 更多 >