找到列表中出现次数最多的元素

背景:其实最开始是在解一个比较大规模的问题,这只是其中一个子问题,解决这道题的方法多种多样,比如先set去重一下list,然后使用list的count函数分别统计每个元素的出现次数,最后输出想要的list信息。这里说一下Python里面有一个很快捷的解法,不需要set,哈希,排序等额外操作

老规矩,还是直接上代码:

from collections import Counter

if __name__ == '__main__':
    words = [1, 1, 1, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5]
    collection_words = Counter(words)
    print(collection_words)
    print(collection_words.keys())
    print(collection_words.values())
    print(max(collection_words.values()))
    print(type(collection_words))

程序运行结果:
Counter({4: 4, 1: 3, 3: 3, 5: 2, 2: 1})
dict_keys([1, 2, 3, 4, 5])
dict_values([3, 1, 3, 4, 2])
4
<class 'collections.Counter'>

1、导入collections模块的Counter类

Python模块千千万,这个模块非常赞,尤其是Counter这个类,可以直接统计list里面所有不同元素分别的出现次数,然后按照结果从大到小排序

2、结果类型

可以看到结果虽然是<class 'collections.Counter'>格式,但其本质上是一个字典类型,所以可以使用一切字典操作来操作这个结果变量

但是当我们单独输出这个字典的key和value的时候,字典就不会按照每个元素的出现顺序排列了,而是元素在列表中出现的实际先后顺序

所以这里有两种方式可以取到出现次数的最大值

1)max函数

print(max(collection_words.values()))

这样只能取到出现次数的最大值,但是不知道是哪个/哪几个元素出现了这么多次

2)字典排序(lambda函数)

collection_word = Counter(words)
collection_words = sorted(collection_word.items(), key=lambda x: x[1], reverse=True)
print(collection_words)

程序运行结果:
[(4, 4), (1, 3), (3, 3), (5, 2), (2, 1)]

使用lambda函数对字典排序,按照key为排序关键词,最后reverse倒序,结果可以直接调用

max_item = collection_words[0][0]
max_count = collection_words[0][1]

总结:Python里的模块&类还是很多的,如果不是面试手撕代码,直接调用这些类一定比自己重复造轮子要好得多,而且也不一定有人家定义好的这么高效

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值