编程题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.mzph.cn/web/78056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件工程师面试常见问题(11)

第五十一问:器件手册的翻译题目 要学英语啊,孩子。 第五十二问:二极管三极管常识题 1.二极管的导通电压一般是 0.7V 2.MOS管根据掺杂类型可以分为 NMOS和PMOS 3.晶体三极管在工作时,发射结和集电结均处于正向偏置,该晶体管工作在一饱和态。…

mysql 配置文件中的[client]、[mysqld]、[mysqldump]和[mysql]区块的作用区别

1. [client] 区块 作用: 适用于 所有 MySQL 客户端工具(如 mysql 命令行客户端、mysqldump、mysqladmin 等)。 常见配置项: [client] host 127.0.0.1 # 默认连接的服务器地址 port 3306 # 默认端口 user root …

SARSA 算法详解:python从零实现

喜欢可以订阅专栏哟 第一章 强化学习基础与核心概念 1.1 强化学习的定义与特点 强化学习(Reinforcement Learning, RL)是机器学习三大范式之一(监督学习、无监督学习、强化学习),其核心思想是通过智能体(Agent)与环境(Environment)的持续交互来学习最优策略。与监督…

(C题|社交媒体平台用户分析问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

AI重塑SEO关键词策略

内容概要 传统SEO策略主要依赖人工经验与基础工具进行关键词布局,存在效率低、覆盖维度单一等痛点。而AI技术的介入,使关键词优化从静态词库匹配转向动态语义网络构建。通过自然语言处理(NLP)与深度学习模型,AI不仅能…

【Unity】 组件库分类详解

1️⃣ Audio(音频组件) 用于处理游戏中的声音。 Audio Source 读音[ˈɔːdiəʊ ˈsɔːs],音频源组件,用于播放音频文件,可设置音量、Pitch、循环播放等属性,是音频播放的核心组件。 Audio Listener 读音…

【区块链】区块链技术介绍

引言 区块链技术自2008年中本聪提出比特币概念以来,逐渐从加密货币的底层技术演变为一场颠覆传统信任机制的全球性革命。它不仅重塑了金融体系,更在物流、医疗、政务等领域展现出巨大潜力。本文将用通俗易懂的语言,结合实例与原理&#xff0c…

MySQL零基础入门:Ubuntu环境安装与操作精解

知识点1【数据库】 数据的存储方式,我们之前学的,从变量,数组,链表,最后到文件,文件之上,便是数据库,而我们要介绍的MySQL就是数据库的关系数据库中的其中一种。 1、数据库 本质&…

力扣——23合并升序链表

目录 1:题目描述: 2.算法思想: 3.代码展示: 1:题目描述: 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入&#xff…

AI重构危化品进口清关:一场效率与安全的双重革命

在全球化工产业链深度捆绑的今天,每年超过3亿吨危险化学品通过中国各大口岸流入国内市场。这些支撑着新能源电池、半导体材料等战略产业的“工业血液”,其进口清关流程却长期困于效率与安全的两难困境:人工审核单据平均耗时72小时&#xff0c…

牛客网题解 | 栈的压入、弹出序列

栈的压入、弹出序列 一、题目链接二、题目三、算法原理:用一个栈模拟入栈出栈的过程四、编写代码 一、题目链接 栈的压入、弹出序列 二、题目 三、算法原理:用一个栈模拟入栈出栈的过程 思路:用一个栈模拟入栈出栈的过程,模拟出…

使用CubeMX新建DMA工程——存储器到存储器模式

目录 1、新建板级支持包 2、修改main.c 3、程序流程 4、问题 新建工程的基本操作步骤参考这里: 【【野火】STM32 HAL库开发实战指南 教学视频 手把手教学STM32全系列 零基础入门CubeMXHAL库,基于野火全系列STM32开发板】 https://www.bilibili.com/…

HTML5 新增的主要标签整理

一、语义化标签&#xff08;让网页结构更清晰&#xff09; 1. <header> 和 <footer> 定义&#xff1a;表示网页的「顶部区域」和「底部区域」。场景&#xff1a; <header>&#xff1a;放 Logo、导航栏、搜索框。<footer>&#xff1a;放版权信息、联系…

Mysql数据库高可用解决方案-Mysql Router

目录 一.MySQL Router介绍 1. 什么是 MySQL Router&#xff1f; 2. MySQL Router 的主要用途 3. MySQL Router 的工作原理 4. MySQL Router 的核心组件 5. MySQL Router 的部署和配置 6. MySQL Router 的优势 7. 注意事项 8. MySQL Router 与其他工具的对比 9. 总结 …

【学习笔记】机器学习(Machine Learning) | 第六周|过拟合问题

机器学习&#xff08;Machine Learning&#xff09; 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习&#xff08;Machine Learning&#xff09;简要声明 摘要过拟合与欠拟合问题一、回归问题中的过拟合1. 欠拟合&#xff08;Underfit&#x…

当算力遇上堵车:AI如何让城市血管不再“血栓”?

目录 一、算力治堵的“外科手术” 二、算力治堵的“内科检查” 三、算力治堵的“中医调理” 治堵如治水,算力是新时代的“大禹” “堵车”是每个大城市的通病,但鲜少有人意识到:交通拥堵的根源并非车辆过多,而在于车速过慢,不是因为堵车才慢,而是因为慢才堵车。中国工…

VM虚拟机安装CentOS7.9

目录 1.下载CentOS7.9 2.VM虚拟机选择自定义&#xff0c;然后一直傻瓜式下一步 3.选择编辑虚拟机设置&#xff0c;然后选择刚刚下载的ISO 4.输入 ip addr 获取ip地址 5.用Xshell连接 1.下载CentOS7.9 链接&#xff1a;https://pan.baidu.com/s/1kW2gGWnbcjNtq4kz46LKVw?p…

文本解析到大模型应用

文本解析到到大模型应用 一、背景 最近接到一个比较恶心的工作&#xff0c;之前有个同事将很多个小的文档整合到了一个大文档中&#xff0c;同时暴露出一个新的问题&#xff0c;大的文档虽然查找问题比较方便但是维护起来较为麻烦&#xff0c;所以需要将大的文档按照标题拆分…

AWS虚拟专用网络全解析:从基础到高级实践

导语 AWS虚拟专用网络是连接企业本地数据中心与AWS云环境的关键桥梁。本文将深入探讨AWS VPN的核心概念、配置方法、最佳实践以及常见问题解决方案,助您构建安全、可靠的混合云网络架构。 一、AWS VPN概述 1. 定义 AWS VPN是一种网络服务,允许用户通过加密隧道将本地网络…

【含文档+PPT+源码】基于微信小程序的校园快递平台

项目介绍 本课程演示的是一款基于微信小程序的校园快递平台&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附带…