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

蓝桥杯python语言基础(7)——自定义排序和二分查找

目录

一、自定义排序

(一)sorted

(二)list.sort

二、二分查找

bisect


一、自定义排序

(一)sorted

sorted() 函数会返回一个新的已排序列表,而列表的 sort() 方法会直接在原列表上进行排序。这两个方法都接受一个 key 参数,key 是一个函数,用于指定排序的依据。

my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]# 按照元素的平方进行排序   
sorted_by_square = sorted(my_list, key=lambda x: x ** 2)   
print(sorted_by_square)# 定义一个包含字典的列表   
students = [{'name': 'Alice', 'age': 20},{'name': 'Bob', 'age': 18},{'name': 'Charlie', 'age': 22}   
]# 按照学生的年龄进行排序   
students.sort(key=lambda student: student['age'])   
print(students)

 基于比较函数的排序

functools.cmp_to_key 是Python标准库 functools 模块中的一个函数,它的作用是将一个传统的比较函数(comparison function)转换为一个 key 函数,以便在 sorted()min()max() 等支持 key 参数的函数中使用。

import functoolsdef custom_compare(tuple1, tuple2):# 这里以二元组第一个元素的绝对值大小进行排序# 如果第一个元素绝对值相等,则按照第二个元素的大小排序abs_value1 = abs(tuple1[0])abs_value2 = abs(tuple2[0])if abs_value1 < abs_value2:return -1elif abs_value1 > abs_value2:return 1else:if tuple1[1] < tuple2[1]:return -1elif tuple1[1] > tuple2[1]:return 1else:return 0tuple_list = [(3, 5), (-2, 7), (2, 1), (-4, 3)]   
sorted_list = sorted(tuple_list, key=functools.cmp_to_key(custom_compare))   
print(sorted_list)

 对字符串排序

string_list = ["apple", "banana", "cherry", "date", "fig", "melon"]def custom_key(s):return len(s), ssorted_by_length = sorted(string_list, key=custom_key)   
print(sorted_by_length)

sorted() 函数会根据 custom_key 函数返回的元组进行排序。首先会按照元组的第一个元素(字符串长度)进行排序,如果长度相同,再按照元组的第二个元素(字符串本身,即字典序)进行排序。在长度相同的情况下按照其他规则排序,只需要相应地修改 custom_key 函数的返回值即可。

为什么 key=custom_key ?

在 sorted() 函数中使用 key=custom_key 而不是 key=custom_key(s) ,这是因为 key 参数需要的是一个函数对象,而不是调用该函数的结果。

key=custom_key ,sorted() 函数会在排序过程中,对可迭代对象中的每个元素自动调用 custom_key 函数。也就是说,sorted() 函数会遍历 string_list 中的每个字符串,依次将每个字符串作为参数传递给 custom_key 函数,然后根据 custom_key 函数返回的值来确定元素的排序顺序。

(二)list.sort

直接修改原始列表,而不是像 sorted() 函数那样返回一个新的已排序列表

string_list = ["apple", "banana", "cherry", "date", "fig", "melon"]def custom_key(s):return len(s), sstring_list.sort(key=custom_key)   
print(string_list)

二、二分查找

bisect

用于在有序序列中进行二分查找和插入操作

bisect.bisect_left(a, x, lo=0, hi=len(a))

在有序列表 a 中查找元素 x 应该插入的位置,使得插入后列表仍然保持有序。如果 x 已经存在于列表中,返回它左边的插入点。

import bisecta = [1, 3, 5, 7, 9]   
x = 4index = bisect.bisect_left(a, x)   
print(f"元素 {x} 应该插入到索引 {index} 处")

bisect.bisect_right(a, x, lo=0, hi=len(a)) (别名 bisect.bisect(a, x, lo=0, hi=len(a))

import bisectnums = [1, 2, 2, 3]# bisect_left
target = 2
left_index = bisect.bisect_left(nums, target)
print(f"bisect_left 查找 {target} 在列表 {nums} 中的插入点: {left_index}")# bisect_right
right_index = bisect.bisect_right(nums, target)
print(f"bisect_right 查找 {target} 在列表 {nums} 中的插入点: {right_index}")new_target = 2
bisect.insort_left(nums, new_target)
print(f"insort_left 将 {new_target} 插入到列表 {[2, 2, 2, 2]} 后: {nums}")new_target2 = 2
bisect.insort_right(nums, new_target2)
print(f"insort_right 将 {new_target2} 插入到列表 {[2, 2, 2, 2]} 后: {nums}")

相关文章:

蓝桥杯python语言基础(7)——自定义排序和二分查找

目录 一、自定义排序 &#xff08;一&#xff09;sorted &#xff08;二&#xff09;list.sort 二、二分查找 bisect 一、自定义排序 &#xff08;一&#xff09;sorted sorted() 函数会返回一个新的已排序列表&#xff0c;而列表的 sort() 方法会直接在原列表上进行排序…...

(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台

1 项目简介&#xff08;开源地址在文章结尾&#xff09; 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频&#xff0c;甄别分类、实况分析鸟类保护动物&#xff0c;与全世界各地的用户&…...

后盾人JS--闭包明明白白

延伸函数环境生命周期 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> <…...

redis的分片集群模式

redis的分片集群模式 1 主从哨兵集群的问题和分片集群特点 主从哨兵集群可应对高并发写和高可用性&#xff0c;但是还有2个问题没有解决&#xff1a; &#xff08;1&#xff09;海量数据存储 &#xff08;2&#xff09;高并发写的问题 使用分片集群可解决&#xff0c;分片集群…...

Kiwi 安卓浏览器本月停止维护,扩展功能迁移至 Edge Canary

IT之家 1 月 25 日消息&#xff0c;科技媒体 Android Authority 今天&#xff08;1 月 25 日&#xff09;发布博文&#xff0c;报道称 Kiwi 安卓浏览器将于本月停止维护&#xff0c;相关扩展支持功能已整合到微软 Edge Canary 浏览器中。 开发者 Arnaud42 表示 Kiwi 安卓浏览器…...

我的AI工具箱Tauri+Django内容生产介绍和使用

在现代内容生产环境中&#xff0c;高效、自动化的工具能够显著提升生产力&#xff0c;降低人工成本。Tauri 与 Django 结合打造的工作箱&#xff0c;集成了强大的 音频处理、视频剪辑、内容下载 以及 AI 文章撰写 等模块&#xff0c;帮助用户在多媒体内容生产的各个环节实现高效…...

四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用)

四.4 Redis 五大数据类型/结构的详细说明/详细使用&#xff08; zset 有序集合数据类型详解和使用&#xff09; 文章目录 四.4 Redis 五大数据类型/结构的详细说明/详细使用&#xff08; zset 有序集合数据类型详解和使用&#xff09;1. 有序集合 Zset(sorted set)2. zset 有序…...

Java---猜数字游戏

本篇文章所实现的是Java经典的猜数字游戏 , 运用简单代码来实现基本功能 目录 一.题目要求 二.游戏准备 三.代码实现 一.题目要求 随机生成一个1-100之间的整数(可以自己设置区间&#xff09;&#xff0c;提示用户猜测&#xff0c;猜大提示"猜大了"&#xff0c;…...

网站快速收录:利用RSS订阅提升效率

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/27.html 利用RSS订阅可以显著提升网站内容的更新和收录效率&#xff0c;以下是一些具体的方法和策略&#xff1a; 一、RSS订阅的基本原理 RSS&#xff08;ReallySimpleSyndication或RichS…...

vue3第三部分--组件通信

title: 组件通信 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端组件通信 目标&#xff1a;重点学习父子组件与兄弟组件的通信方式&#xff0c;以及插槽的作用与使用方式 父子组件通信 主要是通过props和自定义事件来实现 1.1 父 -> 子通信&#xff08;通过 …...

DeepSeek R1-Zero vs. R1:强化学习推理的技术突破与应用前景

&#x1f4cc; 引言&#xff1a;AI 推理的新时代 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09; 的规模化扩展成为 AI 研究的主流方向。然而&#xff0c;LLM 的扩展是否真的能推动 通用人工智能&#xff08;AGI&#xff09; 的实现&#xff1f;DeepSeek 推出的 R1…...

matlab提取滚动轴承故障特征

为了精准、稳定地提取滚动轴承故障特征&#xff0c;提出了基于变分模态分解和奇异值分解的特征提取方法&#xff0c;采用标准模糊C均值聚类(fuzzy C means clustering, FCM)进行故障识 别。对同一负荷下的已知故障信号进行变分模态分解&#xff0c;利用 奇异值分解技术进一步提…...

数据结构与算法学习笔记----容斥原理

数据结构与算法学习笔记----容斥原理 author: 明月清了个风 first publish time: 2025.1.30 ps⭐️介绍了容斥原理的相关内容以及一道对应的应用例题。 Acwing 890. 能被整除的数 [原题链接](890. 能被整除的数 - AcWing题库) 给定一个整数 n n n和 m m m个不同的质数 p 1 …...

Java 知识速记:全面解析 final 关键字

Java 知识速记&#xff1a;全面解析 final 关键字 什么是 final 关键字&#xff1f; final 关键字是 Java 中的一个修饰符。它可以用于类、方法和变量&#xff0c;其作用是限制对这些元素的修改。究竟如何限制&#xff1f;我们来逐个分析。 final 在变量中的用法 1. 声明常…...

(笔记+作业)书生大模型实战营春节卷王班---L0G2000 Python 基础知识

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld 课程视频&#xff1a;https://www.bilibili.com/video/BV13U1VYmEUr/ 课程文档&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python 关卡作业&#xff1a;htt…...

9、Docker环境安装Nginx

一、拉取镜像 docker pull nginx:1.24.0二、创建映射目录 作用&#xff1a;是将docker中nginx的相关配置信息映射到外面&#xff0c;方便修改配置文件 1、创建目录 # cd home/ # mkdir nginx/ # cd nginx/ # mkdir conf html log2、生成容器 docker run -p 80:80 -d --name…...

受击反馈HitReact、死亡效果Death Dissolve、Floating伤害值Text(末尾附 客户端RPC )

受击反馈HitReact 设置角色受击标签 (GameplayTag基本了解待补充) 角色监听标签并设置移动速度 创建一个受击技能&#xff0c;并应用GE 实现设置角色的受击蒙太奇动画 实现角色受击时播放蒙太奇动画&#xff0c;为了保证通用性&#xff0c;将其设置为一个函数&#xff0c;并…...

572. 另一棵树的子树

前导题&#xff1a;100. 相同的树 回顾一下 判断两棵二叉树相同&#xff0c;根结点相同 且 左子树相同 且 右子树相同。 于是判断如下&#xff1a; 根结点都为null&#xff0c;返回true根结点不都为null&#xff0c;返回false根结点都不为null&#xff0c;但是值不相同&#…...

MATLAB中textBoundary函数用法

目录 语法 说明 示例 匹配文本的边界 匹配文本的结尾边界 对文本的边界求反 textBoundary函数的功能是匹配文本的开头或结尾。 语法 pat textBoundary pat textBoundary(type) 说明 pat textBoundary 创建与文本开头或结尾匹配的模式。textBoundary 可以使用 ~ 运算…...

vue3的路由配置

先找到Layout布局文件&#xff0c;从中找到左侧边栏&#xff0c;找到下述代码 <SidebarItem v-for"route in noHiddenRoutes" :key"route.path" :item"route" :base-path"route.path" />/** *菜单项 <SidebarItem>: *使用…...

跟着 MDN 学 HTML day_51:(深入理解 XPathEvaluator 接口)

在前端开发中&#xff0c;我们经常需要对 DOM 树进行复杂的节点查询。虽然 querySelector 和 querySelectorAll 已经能够满足大部分 CSS 选择器需求&#xff0c;但在某些场景下&#xff0c;我们需要更强大的查询能力&#xff0c;比如根据节点的文本内容查找、根据属性是否存在进…...

品牌如何通过AI搜索优化构建长期影响力?GEO战略资产打造可持续竞争壁垒

摘要品牌通过AI搜索优化&#xff08;GEO&#xff09;构建长期影响力与权威认知&#xff0c;关键在于将其从短期获客技术升级为沉淀知识、构建AI信任机制的战略资产。核心路径是持续向AI模型提供高质量、结构化的品牌知识&#xff0c;使其成为AI的“可信信源”&#xff0c;并主动…...

面向对象与多源遥感协同:eCognition-ENVI在雄安新区土地利用动态监测中的实践

1. 面向对象与多源遥感协同的技术背景 在快速城市化的今天&#xff0c;土地利用动态监测变得越来越重要。传统的像素级分类方法虽然简单直接&#xff0c;但在处理高分辨率遥感影像时&#xff0c;往往会遇到"椒盐效应"——就像用细小的马赛克拼图&#xff0c;每个像素…...

Go语言内存管理与性能优化

Go语言内存管理与性能优化 一、内存管理基础 Go语言采用自动内存管理机制&#xff0c;开发者无需手动管理内存分配和释放。理解Go的内存管理机制对于编写高性能代码至关重要。 Go内存分配器 Go使用tcmalloc&#xff08;Thread-Caching Malloc&#xff09;作为底层内存分配器&am…...

3分钟为Windows 11 LTSC恢复微软商店的完整指南:解决精简版系统应用生态缺失问题

3分钟为Windows 11 LTSC恢复微软商店的完整指南&#xff1a;解决精简版系统应用生态缺失问题 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows …...

Java后端工程师必备:系统学习大模型应用开发(收藏版)

本文深入探讨了Java后端工程师如何系统性地学习AI应用开发&#xff0c;从基础的CRUD操作到大模型的集成&#xff0c;包括RAG、Tool Calling、MCP、Agent等关键技术。文章强调了AI应用开发不仅是调用大模型接口&#xff0c;而是将大模型能力融入真实业务系统&#xff0c;实现理解…...

企业级浏览器自动化测试架构设计:Chrome for Testing的高可用解决方案与实践指南

企业级浏览器自动化测试架构设计&#xff1a;Chrome for Testing的高可用解决方案与实践指南 【免费下载链接】chrome-for-testing 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-for-testing Chrome for Testing是Google ChromeLabs团队为解决浏览器自动化测试…...

Ketcher:三步掌握开源化学绘图工具的完整使用指南

Ketcher&#xff1a;三步掌握开源化学绘图工具的完整使用指南 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher 你是否曾因绘制复杂分子结构而烦恼&#xff1f;传统化学绘图软件要么操作复杂&#xff0c;要么…...

全球BGA锡球市场高速成长:2025年2.55亿美元筑基,2032年剑指4.43亿,8.3%CAGR锚定长期高增长逻辑

BGA锡球&#xff08;BGA Solder Ball&#xff09; 是用于替代IC元件封装结构中引脚的核心连接件&#xff0c;满足电性互连及机械连接的双重要求。简而言之&#xff0c;它是BGA封装工艺中不可或缺的焊接材料。QYResearch调研显示&#xff0c;2025年全球BGA锡球市场规模大约为2.5…...

终极数据恢复指南:TestDisk PhotoRec 免费开源解决方案

终极数据恢复指南&#xff1a;TestDisk & PhotoRec 免费开源解决方案 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 你是否曾因误删分区、格式化硬盘或系统崩溃而面临数据丢失的噩梦&#xff1f;别担心…...