Python:在列表中查找重复项

时间:2014-11-15 10:37:02

标签: python numpy count hashable

我有一个浮动列表,我想知道其中有多少重复项。

我试过这个:

p = t_gw.p(sma, m1, m2)       #p is a 1d numpy array
p_list = list(p)
dup = set([x for x in p_list if p_list.count(x) > 1])
print dup

我也试过使用collections.counter,但我总是得到同样的错误

TypeError: unhashable type: 'numpy.ndarray'

我在类似的问题中四处查看,但我无法理解可用的方法,为什么列表(或numpy数组)不可清除以及我应该使用哪种类型。

3 个答案:

答案 0 :(得分:2)

你的numpy-array是二维的。所以list(p)没有做到,你所期望的。请改用list(p.flat)

或(误)使用numpy的直方图函数:

cnt, bins = numpy.histogram(p, bins=sorted(set(p.flat))+[float('inf')])
dup = bins[cnt>1]

答案 1 :(得分:-1)

这取决于重复数量的含义。

一种简单的方法是使用hash:

h = {}
arr = [6, 3, 1, 1, 6, 2, 1]
for i in arr:
    if i in h:
        h[i] += 1
    else:
        h[i] =1

print h

现在,如果您的意思是重复项是在列表中使用多次的值,则可以执行以下操作:

num = 0
for i in h:
    if h[i] > 1:
        num += 1

print num

我认为将其修改为numpy非常容易。

答案 2 :(得分:-1)

你想在列表中计算一些东西吗? 为什么不使用list对象的count方法?

number = my_list.count(my_float)