2016-11-16 81 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()) 
相关问题