2016-07-30 34 views
0

这是可行的,但是当我没有范围(len ..))并且做了for i in arrfor j in arr,我在if语句上得到了IndexError: list index out of range。为什么是这样?为什么我需要范围(Len))嵌套的if?

arr = [2,2,2,2,4,5,2,45,3,4,4] 

mostFrq = 0 
mostFrqAmount = 0 

for i in range(len(arr)): 

     amountOfCurrent = 0 

     # now look at temp element 
     for j in range(len(arr)): 
       if (arr[j] == arr[i]): 
         amountOfCurrent = amountOfCurrent + 1 

     if (amountOfCurrent > mostFrqAmount): 
       mostFrqAmount = amountOfCurrent 
       mostFrq = arr[i] 

print(mostFrq) 
print(mostFrqAmount) 
+1

因为其中一项是'45'。由于列表中没有足够的数字,这会引发错误。 – zondo

+0

顺便说一句,你应该考虑使用['collections.Counter(arr).most_common(1)'](https://docs.python.org/3/library/collections.html#collections.Counter.most_common)。 –

回答

0

如果你分析是怎么回事,在失败的形式的代码,您有:

arr = [2,2,2,2,4,5,2,45,3,4,4] 

mostFrq = 0 
mostFrqAmount = 0 

for i in arr: 

     amountOfCurrent = 0 

     # now look at temp element 
     for j in arr: 
       if (arr[j] == arr[i]): 
         amountOfCurrent = amountOfCurrent + 1 

     if (amountOfCurrent > mostFrqAmount): 
       mostFrqAmount = amountOfCurrent 
       mostFrq = arr[i] 

print(mostFrq) 
print(mostFrqAmount) 

使用for i in arr形式返回正在处理一个迭代为你的索引信息,所以你的“我”被设置为你的数组中的值。

当你进入这一行: if (arr[j] == arr[i]):

你最终的arr[45]

你的数组的索引只到10的变量替换,这样,你有错误抛出。

+0

杜尔我应该知道....为我在是价值' 和'我在范围内(len(arr))是索引' –

+0

np,感谢您接受答案。 –

0

当你迭代一个列表时,你会得到它的元素。既然你正在那个元素的索引处访问列表元素,当它超出界限时它将不起作用(并且不会达到你期望的)。

相反,只需使用你被循环提供的项目:

mostFrq = 0 
mostFrqAmount = 0 

for i in arr: 
     amountOfCurrent = 0 

     # now look at temp element 
     for j in arr: 
       if (j == i): 
         amountOfCurrent += 1 

     if (amountOfCurrent > mostFrqAmount): 
       mostFrqAmount = amountOfCurrent 
       mostFrq = i 
0

不知道你已经尝试过的东西。这应该工作方式相同:

arr = [2,2,2,2,4,5,2,45,3,4,4] 

mostFrq = 0 
mostFrqAmount = 0 

for i in arr: 

     amountOfCurrent = 0 

     # now look at temp element 
     for j in arr: 
       if (j == i): 
         amountOfCurrent = amountOfCurrent + 1 

     if (amountOfCurrent > mostFrqAmount): 
       mostFrqAmount = amountOfCurrent 
       mostFrq = i 

print(mostFrq) 
print(mostFrqAmount)