当前位置: 首页 > news >正文

编程题python常用技巧-持续

1.字典

1.1排序 

在Python中,要按照字典的值进行排序,可以按照以下步骤操作:

方法说明

  1. 获取键值对列表‌:使用 dict.items() 获取字典的键值对视图。
  2. 排序键值对‌:使用 sorted() 函数,并通过 key 参数指定按值排序。
  3. 转换回字典(可选)‌:将排序后的列表转换为字典(Python 3.7+ 支持有序字典)。

 

# 原始字典
d = {'apple': 10, 'banana': 5, 'orange': 20}# 按值升序排序键值对
sorted_items = sorted(d.items(), key=lambda x: x[1])# 输出排序后的列表
print("按值升序排列的列表:", sorted_items)
# 输出: [('banana', 5), ('apple', 10), ('orange', 20)]# 转换为有序字典(Python 3.7+)
sorted_dict = dict(sorted_items)
print("排序后的字典:", sorted_dict)
# 输出: {'banana': 5, 'apple': 10, 'orange': 20}# 按值降序排序(添加 reverse=True)
sorted_items_desc = sorted(d.items(), key=lambda x: x[1], reverse=True)
print("按值降序排列的列表:", sorted_items_desc)
# 输出: [('orange', 20), ('apple', 10), ('banana', 5)]

 

 1.2统计字典的 key个数 collections.Counter(arr)

代码实现了对数组 arr 中元素的频率统计,并按出现次数 ‌从低到高‌ 排序。以下是代码解析及优化建议:

group = collections.Counter(arr) freq = group.most_common()[::-1]

  1. collections.Counter(arr)
    统计 arr 中每个元素的出现次数,返回 Counter 对象(字典子类,键为元素,值为频率)38。

    • 例如:arr = [1, 2, 2, 3] → group = {1:1, 2:2, 3:1}
  2. most_common()
    返回元素及其频率的列表,按频率 ‌从高到低‌ 排序。若参数为空(如 most_common()),返回所有元素23。

    • 示例结果:[('b', 3), ('a', 2), ('c', 1)]
  3. [::-1]
    通过切片反转列表,实现 ‌从低到高‌ 排序56。

    • 最终结果:[('c', 1), ('a', 2), ('b', 3)]

潜在问题与改进

1. ‌相同频率元素的顺序不确定性

  • most_common() 对相同频率的元素会保留原始插入顺序(Python 3.7+ 字典有序),但若需严格按元素值排序,需额外处理8。
  • 改进方法‌:显式指定排序规则。
  • freq = sorted(group.items(), key=lambda x: (x[1], x[0])) # 先按频率升序,再按元素值升序

2. ‌性能优化(适用于大数据量)

  • most_common() 的时间复杂度为 O(n log n),若仅需升序结果,可直接生成排序列表:

    freq = sorted(group.items(), key=lambda x: x[1]) # 直接生成升序列表,无需反转


完整示例

from collections import Counter 
arr = [1, 2, 2, 3, 3, 3] 
group = Counter(arr) # 原始方法:反转列表 
freq_reversed = group.most_common()[::-1] 
# 输出:[(1, 1), (2, 2), (3, 3)] 
# 改进方法:显式排序 
freq_sorted = sorted(group.items(), key=lambda x: x[1]) # 输出:[(1, 1), (2, 2), (3, 3)]

方法对比

方法时间复杂度相同频率元素的处理适用场景
most_common()[::-1]O(n log n)保留插入顺序快速实现,无需严格排序
sorted()O(n log n)可自定义排序规则(如元素值)需明确控制排序逻辑

注意事项

  • 空数组处理‌:若 arr 为空,group 也为空,freq 会得到空列表,需在后续逻辑中处理5。
  • 频率为0的元素‌:Counter 默认不包含未出现的元素,但可通过 elements() 遍历所有可能键
    def findLeastNumOfUniqueInts2(self, arr: list, k: int) -> int:group = collections.Counter(arr) # Counter({5: 2, 4: 1})print(group)freq=group.most_common()[::-1] # 逆序[(4, 1), (5, 2)]print(freq)ans=len(freq)for _ ,occ in freq:if k>=occ:ans-=-1k-=occelse:breakreturn ansprint(s.findLeastNumOfUniqueInts2([5, 5, 4], 1))Counter({5: 2, 4: 1})

题目: 1481. 不同整数的最少数目 - 力扣(LeetCode)

 def findLeastNumOfUniqueInts(self, arr: List[int], k: int) -> int:arr_dict={}for i in arr:if i not in arr_dict:arr_dict[i]=1else:arr_dict[i]+=1# 对字典排序 sorted_dict=dict(sorted(arr_dict.items(),key=lambda x:x[1]))#print(sorted_dict)keys=sorted_dict.keys()ans=len(keys)for key in keys:if k-sorted_dict[key]>=0:#sorted_dict.remove(key)ans-=1k=k-sorted_dict[key]else:breakreturn ans

http://www.xdnf.cn/news/249517.html

相关文章:

  • 【java WEB】恢复补充说明
  • 基于hr2管理系统的学习
  • BG开发者日志501:故事模式的思路2
  • 2025五一杯数学建模B题:矿山数据处理问题,详细问题分析,思路模型
  • 有没有贴吧备份的网站,备份贴吧网站数据的方法
  • 【c++】【STL】queue详解
  • 【业务领域】PCIE协议理解
  • 三维装配可视化界面开发笔记
  • 2024年US SCI1区TOP:自适应变异麻雀搜索算法AMSSA+地铁隧道变形预测,深度解析+性能实测
  • 小刚说C语言刷题—1602总分和平均分
  • xml 和 yaml 的区别
  • 冒泡排序:从入门到入土(不是)的奇妙旅程
  • 文章记单词 | 第55篇(六级)
  • 字节跳动社招 BSP驱动工程师
  • 猫,为什么是猫?
  • JavaScript基础-比较运算符
  • 前端八股 5
  • 2025深圳杯、东三省数学建模B题数模AI全网专业性第一
  • 2025五一杯C题五一杯数学建模思路代码文章教学:社交媒体平台用户分析问题
  • 文章记单词 | 第53篇(六级)
  • windows中Python的pip工具换源的方法及其原理
  • HOOK上瘾思维模型——AI与思维模型【88】
  • HW1 code analysis (Machine Learning by Hung-yi Lee)
  • gephi绘图
  • 自动剪辑批量混剪视频过原创软件工具视频帧级处理技术实践批量截图解析
  • Python实例题:Python实现Python解释器
  • C++的基础知识(引用、类、封装、继承、多态、函数重载)
  • 驱动读写实验
  • GRPO:利用组内平均奖励来计算优势
  • 蓝桥杯Python案例