如何检测列表中的重复单词并以特定方式对其进行计数

时间:2017-04-01 13:23:22

标签: python list python-3.x python-3.6

我已经学习python 3大约1周了,我找不到办法做到这一点,所以这是我的问题。

我有这个清单:

['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana']

现在我想检测重复的单词,计算它们,将结果放在单词前面并打印成单个字符串,如下例所示:

Apple 3,Banana 2,番茄,胡萝卜

订单无关紧要。

3 个答案:

答案 0 :(得分:0)

arr = ['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana']

', '.join(x + ' ' + str(arr.count(x)) for x in set(arr))

返回:

'banana 2, carrot 1, apple 3, tomato 1'

如果您要排除1 s:

', '.join(x + (' ' + str(arr.count(x)) if arr.count(x) > 1 else '') for x in set(arr))

产生:

'banana 2, carrot, apple 3, tomato'

解释:

这就是你所谓的“理解”。"我所做的就是遍历arr中的每个不同元素(即迭代arr中的一组唯一元素)并计算每个元素在arr中出现的次数对arr.count(x)中的每个x使用set(arr)。其他所有东西只是让你的最终字符串结果在一行中的一种方式。

你也可能对collections.Counter感兴趣,它有效地返回了一个元素字典:计数对,并且可以很容易地快速找到给定元素 x 在你的元素中出现的次数名单。 :

>>> collections.Counter(arr)
Counter({'apple': 3, 'banana': 2, 'carrot': 1, 'tomato': 1})

答案 1 :(得分:0)

您可以使用收藏中的计数器:

from collections import Counter

the_list = ['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana']

dct = Counter(the_list)

for i in range(len(dct.keys())):
     print dct.keys()[i], str(dct.values()[i])+", ",

答案 2 :(得分:0)

这是一个简单的解决方案:

    list = ['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana']
    d = {x:list.count(x) for x in list}
    print d

输出是: {'番茄':1,'胡萝卜':1,'苹果':3,'香蕉':2}