3 回答
TA贡献1803条经验 获得超6个赞
如果您使用的是Python的早期版本,或者您有充分的理由推出自己的单词计数器(我想听听它!),则可以尝试使用以下方法dict。
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> word_list = ['Jellicle', 'Cats', 'are', 'black', 'and', 'white,', 'Jellicle', 'Cats', 'are', 'rather', 'small;', 'Jellicle', 'Cats', 'are', 'merry', 'and', 'bright,', 'And', 'pleasant', 'to', 'hear', 'when', 'they', 'caterwaul.', 'Jellicle', 'Cats', 'have', 'cheerful', 'faces,', 'Jellicle', 'Cats', 'have', 'bright', 'black', 'eyes;', 'They', 'like', 'to', 'practise', 'their', 'airs', 'and', 'graces', 'And', 'wait', 'for', 'the', 'Jellicle', 'Moon', 'to', 'rise.', '']
>>> word_counter = {}
>>> for word in word_list:
... if word in word_counter:
... word_counter[word] += 1
... else:
... word_counter[word] = 1
...
>>> popular_words = sorted(word_counter, key = word_counter.get, reverse = True)
>>>
>>> top_3 = popular_words[:3]
>>>
>>> top_3
['Jellicle', 'Cats', 'and']
热门提示:每当您要使用这样的算法时,交互式Python解释器就是您的朋友。只需将其键入并观看即可,并检查整个过程中的元素。
TA贡献1864条经验 获得超6个赞
在Python 2.7及更高版本中,有一个名为Counter的类可以帮助您:
from collections import Counter
words_to_count = (word for word in word_list if word[:1].isupper())
c = Counter(words_to_count)
print c.most_common(3)
结果:
[('Jellicle', 6), ('Cats', 5), ('And', 2)]
我对编程很陌生,所以请尝试以最准系统的方式进行。
您可以改用字典来完成此操作,其中的键是一个单词,值是该单词的计数。首先遍历单词,如果不存在则将其添加到字典中;否则,如果单词存在,则增加单词的计数。然后,要找到O(n*log(n))前三个元素,可以使用简单的排序算法并从结果中获取前三个元素,也可以使用O(n)仅记住前三个元素即可扫描列表的算法。
对于初学者来说,一个重要的观察结果是,通过使用为此目的而设计的内置类,您可以节省很多工作和/或获得更好的性能。熟悉标准库及其提供的功能是很好的。
TA贡献1843条经验 获得超7个赞
仅返回包含最常用单词的列表:
from collections import Counter
words=["i", "love", "you", "i", "you", "a", "are", "you", "you", "fine", "green"]
most_common_words= [word for word, word_count in Counter(words).most_common(3)]
print most_common_words
打印:
['you', 'i', 'a']
“ most_common(3)”中的3 ,指定要打印的项目数。 Counter(words).most_common()返回一个元组列表,每个元组以单词为第一个成员,频率为第二个成员。元组按单词的频率排序。
`most_common = [item for item in Counter(words).most_common()]
print(str(most_common))
[('you', 4), ('i', 2), ('a', 1), ('are', 1), ('green', 1), ('love',1), ('fine', 1)]`
“ the word for word, word_counter in”仅提取元组的第一个成员。
添加回答
举报