Python计算项目在列表中的外观

时间:2011-11-15 07:25:24

标签: 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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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']

答案 2 :(得分: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
>>>

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您也可以使用collections.defaultdict进行计数:

from collections import defaultdict

animals = ["cat", "dog", "cat", "turtle", "apple", "bird", "bird"]

animal_counts = defaultdict(int)
for animal in animals:
    animal_counts[animal] += 1

print([animal for animal, count in animal_counts.items() if count > 1])
# ['cat', 'bird']