力扣每日一题:692.前K个高频单词 Python双解,包教包会!

简介: 力扣每日一题:692.前K个高频单词 Python双解,包教包会!

692.前K个高频单词


难度:中等


题目:

给一非空的单词列表,返回前 k 个出现次数最多的单词。

返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。

注意:

  • 假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。
  • 输入的单词均由小写字母组成。


示例:

示例 1:
输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2
输出: ["i", "love"]
解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
    注意,按字母顺序 "i" 在 "love" 之前。
示例 2:
输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
输出: ["the", "is", "sunny", "day"]
解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,
    出现次数依次为 4, 3, 2 和 1 次。


分析:

这道题相信大家第一时间都能想到将单词列表转化为哈希计数表,但困难的就是如何针对该哈希表进行排序。

这里介绍两种方法,各有所长,供大家参考:

  1. 如果大家之前做过 179.最大数
    那么相信你一定对cmp_to_key这个方法不会陌生,它对于Python3提供了sorted过程中的两两比较功能。
    我们只需要单独创建一个函数,针对字典K进行函数式排序即可。
  2. 如果我们不了解cmp_to_key,那么这道题怎么解?老老实实用嵌套列表。
    我们将Counter统计好的字典,按照k,v的形式添加进一个列表,然后在对列表排序的时候,对数字与字符串进行分别排序即可。


解题1: cmp_to_key

from collections import Counter
from functools import cmp_to_key
class Solution:
    def topKFrequent(self, words, k):
        d = Counter(words)
        def cmp(a, b):
            if d[a] > d[b]:
                return -1
            elif d[a] == d[b]:
                return -1 if sorted([a, b])[0] == a else 1
            else:
                return 1
        return sorted(d.keys(), key=cmp_to_key(cmp))[:k]


解题2: 列表切片

from collections import Counter
class Solution:
    def topKFrequent(self, words, k: int):
        d = Counter(words)
        tmp = []
        for word, num in d.items():
            tmp.append((num, word))
        ret = sorted(tmp, key=lambda x: (-x[0], x[1]))
        return [i[1] for i in ret[:k]]




相关文章
|
1月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
47 4
|
1月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
1月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
3月前
|
Python
下载python所有的包 国内地址
下载python所有的包 国内地址
|
23天前
|
Python 容器
[oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
28 5
|
1月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
41 5
|
1月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
2月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
54 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
3月前
|
机器学习/深度学习 搜索推荐 数据可视化
Python量化炒股常用的Matplotlib包
Python量化炒股常用的Matplotlib包
41 7
|
3月前
|
数据采集 数据可视化 数据挖掘
Python量化炒股常用的Pandas包
Python量化炒股常用的Pandas包
63 7