2017-06-06 23 views
0

要素の最大頻度をリスト内で検索しようとしています。PythonリストIndexError:リストインデックスが範囲外にある

今、リストの最後にチェックされた要素([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)) 
+1

あなたは配列を持つが、リストで作業されていません。タイトルを修正してください。 –

+0

あなたのコードを修正するのではなく、あなたの情報だけを修正します: 'a1.count(x)'メソッドがあります。ここで 'x'は要素です。要素の出現を数えます。 – Franz

+0

あなたのコードは私にとって完璧に機能します。 – BluCode

答えて

0

BluCodeが指摘するように、あなたのコードは、あなたが提供する(あるいは、少なくとも、それがクラッシュしていない4のテストケースのため正常に動作し、あなたが指摘するように、第4回の試験のために、それはありませんが、モードを返します。最大モード)。あなたが暗に示したように、あなたは最後の要素を数えていません(または実際には、最後のバッチが最大になるかどうかをチェックしていません)ので、もしa4が代わりに[1,2,2,2,2,3] 3、3、5、5、6、6、7、7、7]、それは間違って2を出力する(3 2と3 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)) 
関連する問題