2016-11-16 17 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'は、[Pythonの:リストで繰り返し要素をカウント]の – Chr

+0

可能な重複空であるので、それは動作しません(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()) 
関連する問題