我已经学习python 3大约1周了,我找不到办法做到这一点,所以这是我的问题。
我有这个清单:
['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana']
现在我想检测重复的单词,计算它们,将结果放在单词前面并打印成单个字符串,如下例所示:
Apple 3,Banana 2,番茄,胡萝卜
订单无关紧要。
答案 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}