为了账号安全,请及时绑定邮箱和手机立即绑定

如何找到列表中最常见的元素?

如何找到列表中最常见的元素?

aluckdog 2019-10-19 16:43:45
给出以下列表['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.', '']我正在尝试计算每个单词出现多少次并显示前3位。但是,我只想查找首字母大写的前三位,而忽略所有首字母大写的单词。我敢肯定有比这更好的方法,但是我的想法是做以下事情:将列表中的第一个单词放入另一个称为uniquewords的列表中从原始列表中删除第一个单词及其所有重复单词将新的第一个单词添加到唯一单词中从原始列表中删除第一个单词及其所有重复单词。等等...直到原始列表为空。计算唯一单词中每个单词出现在原始列表中的次数找到前三名并打印
查看完整描述

3 回答

?
慕码人8056858

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解释器就是您的朋友。只需将其键入并观看即可,并检查整个过程中的元素。


查看完整回答
反对 回复 2019-10-19
?
慕尼黑的夜晚无繁华

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)仅记住前三个元素即可扫描列表的算法。


对于初学者来说,一个重要的观察结果是,通过使用为此目的而设计的内置类,您可以节省很多工作和/或获得更好的性能。熟悉标准库及其提供的功能是很好的。


查看完整回答
反对 回复 2019-10-19
?
蓝山帝景

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”仅提取元组的第一个成员。


查看完整回答
反对 回复 2019-10-19
  • 3 回答
  • 0 关注
  • 426 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信