我看过this和this。我想知道我是否可以在不使用像集合这样的库的情况下完成它,但是使用简单的循环结构。 我可以用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 :(得分: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 :(得分:4)
欢迎来到Python世界,你是C开发人员! ;)你可以在这里删除分号。
你的SELECT *
这里是一个包含0个元素的Python列表,你无法通过这种方式获取或设置元素:b
如果索引为i的元素不存在。
但是有很多方法可以做你想要的。如果你真的不想使用内置库,你可以尝试这种方式(应该产生与C代码完全相同的输出):
b[i]
但是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
答案 2 :(得分:2)
如果我理解正确,您将创建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
然后通过字典检查重复。