2011-11-15 26 views
0

appearences鉴于Python的统计项的列表

listEx = ['cat', 'dog', 'cat', 'turtle', 'apple', 'bird', 'bird'] 

for i in listEx: 
    if listEx.count(i) > 1: 
     print "this item appears more than once", i 
    else: 
     print "this item appears only once", i 

我希望它打印猫和鸟类出现不止一次(或只是生产['cat', 'bird'])。我怎样才能做到这一点?

回答

5
>>> [v for v, r in itertools.groupby(sorted(listEx)) if len(list(r)) > 1] 
['bird', 'cat'] 
5

collections.Counter工具让这类任务非常简单:

>>> from collections import Counter 
>>> listEx = ['cat', 'dog', 'cat', 'turtle', 'apple', 'bird', 'bird'] 
>>> [k for k, cnt in Counter(listEx).items() if cnt > 1] 
['bird', 'cat'] 
1

所有以前的答案是伟大的。我只是想指出,你也可以简单地使用字典来算你的项目:

>>> listEx = ['cat', 'dog', 'cat', 'turtle', 'apple', 'bird', 'bird'] 
>>> d = dict() 
>>> for v in listEx: d[v] = d[v] + 1 if v in d else 1 
... 
>>> d 
{'turtle': 1, 'bird': 2, 'apple': 1, 'dog': 1, 'cat': 2} 
>>> for v in d: 
...  if d[v] > 1: 
...    print v 
... 
bird 
cat 
>>> 
+1

我想你的意思'd.get(V,0)'。甚至是'd = collections.defaultdict(int)'。 –

+1

没错。 'd = collections.defaultdict(int)' – MarcoS

0
[word for word in set(listEx) if listEx.count(word) > 1]