2016-11-16 70 views
-1

我看過thisthis。我想知道是否可以在不使用集合等庫的情況下做到這一點,而是使用簡單的循環結構。 我可以在Python中做到這一點嗎?在Python中查找數組中整數出現的次數

void printRepeating(int arr[], int size) 
{ 
    int *count = (int *)calloc(sizeof(int), (size - 2)); 
    int i; 

    printf(" Repeating elements are "); 
    for(i = 0; i < size; i++) 
    { 
    if(count[arr[i]] == 1) 
     printf(" %d ", arr[i]); 
    else 
    count[arr[i]]++; 
    }  
} 

我試着這樣做 -

a=[1,2,3,2,4,3,1,7,4,3]; 
b=[]; 
for i in a: 
     b[i]=b[i]+1; 

,但我得到

IndexError: list index out of range 

是否有辦法解決它?

+0

它不起作用,因爲您的列表'B'是空 – Chr

+0

可能的複製[Python的:計算列表重複的元素(http://stackoverflow.com/questions/23240969/python-count-重複列表中的元素) –

+1

在其他鏈接中接受的答案可以不使用庫。 –

回答

5

使用dict(Python的內置哈希表型)將是最簡單的:

a = [1,2,3,2,4,3,1,7,4,3] 
b = {} 
for i in a: 
    # get(key, default) falls back to default if key is not present 
    b[i] = b.get(i, 0) + 1 

> b 
{1: 2, 2: 2, 3: 3, 4: 2, 7: 1} 
> b[3] 
3 
1

如果我理解正確,你正在創建b作爲一個列表來計算每個號碼的出現在a。這樣,你可以創建一個可能更容易的字典:

a=[1,2,3,2,4,3,1,7,4,3] 
b={} 
for i in a: 
    if i in b: 
     b[i]+=1 
    else: 
     b[i]=1 

然後通過字典檢查重複。

4

歡迎來到Python世界,你的C開發者! ;)你可以在這裏放下分號。

您的b這裏是一個包含0個元素的Python列表,您不能通過這種方式獲取或設置元素:b[i]如果索引爲i的元素不存在。

但有很多方法可以做你想做的。如果你真的不想使用內置庫,你可以試試這個方法(應產生完全相同的輸出作爲C代碼):

a = [1,2,3,2,4,3,1,7,4,3] 
print("Repeating elements are") 
for i in a: 
    if a.count(i) > 1: 
     print(i) 

collections.Counter是做到這一點的最好辦法,它是內置的,爲什麼不使用它?

from collections import Counter 
a = [1,2,3,2,4,3,1,7,4,3] 
counter = Counter(a) 
print(a.most_commons())