python之排序

news2024/11/15 21:33:18

目录

  • 1. 对一维array中的数值进行从大到小排序
  • 2. 将DataFrame的列逆序排列
  • 3. 根据字符串中的数字进行排序
    • 3.2 啊
  • 4. 列表
  • 参考资料

1. 对一维array中的数值进行从大到小排序

import numpy as np
a = np.array([5,6,8,2,1,7,5,3,90,78,62,5,4,2,9,4])
# b = a.sort(axis=0,kind='quicksort',order=None)
b = sorted(a,reverse=True)
 
print('a: ', a)
print('b: ', b)

输出:

a: [ 5  6  8  2  1  7  5  3 90 78 62  5  4  2  9  4]
b: [90, 78, 62, 9, 8, 7, 6, 5, 5, 5, 4, 4, 3, 2, 2, 1]

2. 将DataFrame的列逆序排列

https://blog.csdn.net/ljr_123/article/details/122157636

3. 根据字符串中的数字进行排序

colname = ['time', 'ws_148-A_Avg', 'ws_72-A_Avg', 'ws_150-A_Avg', 'ws_70-A_Avg', 'ws_152-A_Avg', 'ws_68-A_Avg', 'ws_154-A_Avg', 'ws_66-A_Avg', 'ws_105-A_Avg', 'Unnamed: 10']
a = colname[1:-1]
a.sort(key=lambda l: int(re.findall('\d+', l)[0]))
a
Out[15]: 
['ws_66-A_Avg', 'ws_68-A_Avg', 'ws_70-A_Avg', 'ws_72-A_Avg', 'ws_105-A_Avg', 'ws_148-A_Avg', 'ws_150-A_Avg', 'ws_152-A_Avg', 'ws_154-A_Avg']
lst = ['123', '385', '674', '147']  # 依据第二位数字进行排序
lst.sort(key=lambda l: l[1])  # 利用key索引列表中每个元素的第二个位置,并依此排序
print(lst)
# result = ['123', '147', '674', '385']
lst = ['pic-1', 'pic-3', 'pic-2', 'pic-10', 'pic-6']
lst.sort()  # 当字符串中的数字不止一位时无法简单利用key进行索引
print(lst)
# 你会发现 result = ['pic-1', 'pic-10', 'pic-2', 'pic-3', 'pic-6'] 不合自己要求,这个和字符串的排序机制有关,暂不分析

这个时候我们可以使用正则表达式:

import re
lst.sort(key=lambda l: int(re.findall('\d+', l)[0]))  # 找出字符串中的数字并依据其整形进行排序
print(lst)
# result = ['pic-1', 'pic-2', 'pic-3', 'pic-6', 'pic-10']  # 符合预期按顺序排序

用正则很容易将这个位置的序号“取出来”,转换为数字类型,然后利用sorted函数的第2个参数key进行排序即可。

比如本例可以用这样的代码进行排序:

folders = sorted(folders, key=lambda s: int(s.split()[-2]))

但是这样的算法并不够“干净”也不够“通用”,比如当文本中没有数字就会报错,或者数字不在规则设定的位置、或者有多组数字,也无法正确排序。

3.2 啊

既然没有捷径可走,那就想办法把所有的“数字”和“非数字字符”(不仅是英文)全部提出来。

比如目标字符串,目标达到这样的效果:

'he11owor1d' -> ['he', 11, 'owor', 1, 'd']

可以使用正则表达式进行匹配,不过正则表达式中,"\d+“只能匹配数字,”\D+“只能匹配非数字,”(\D+)(\d+)"可以取出所有的数字和非数字,但是却匹配不到字符串首的数字和字符串尾的非数字。

为了解决这一点,手动在串首和串尾分别增加一个英文和数字,就可以让原本字符串内的所有内容全部符合正则规则并匹配到,最后再删掉头尾就可以了。

(当然,头尾统一增加一个字符并不会影响排序顺序,所以这两个字符也可以不删)

正则表达式匹配:

s = 'he11owor1d'  #hexxo,两个像l的为数字1
s1 = re.findall(r'(\D+)(\d+)', 'a' + s + '0')  # 最后一个为数字0,\D匹配非数字,\d匹配数字

输出:

[('ahe', '11'), ('owor', '1'), ('d', '0')]

返回的结果是二维数组,通过sum函数组装成一维数组:

s2 = sum(s1, ())

输出:

('ahe', '11', 'owor', '1', 'd', '0')

这个很秀的操作是使用了sum函数的第2个控制参数:

sum(iterable, start=0, /)Return the sum of a ‘start’ value (default: 0) plus an iterable of numbersWhen the iterable is empty, return the start value. This function is intended specifically for use with numeric values and may reject non-numeric types.

将数组中表示数字的字符串转化成数字,写成列表递推式可以用一行代码写出来:

s3 = [int(s) if s.isdigit() else s for s in s2]

输出:

['ahe', 11, 'owor', 1, 'd', 0]

一行代码写出来:

print(sorted(os.listdir(), key=lambda s: [int(s) if s.isdigit() else s for s in sum(re.findall(r'(\D+)(\d+)', 'a'+s+'0'), ())]))

print(sorted(os.listdir(), key=lambda s: [int(s) if s.isdigit() else s for s in re.findall(r'\D+|\d+', 'a'+s+'0')]))

print(sorted(os.listdir(), key=lambda s: sum(((s, int(n)) for s, n in re.findall(r'(\D+)(\d+)', 'a%s0'%s)), ())))

这个方法减少了n次str.isdigit()函数的运算,所以理论上还会更快一些。

另一方面为了增加代码的复用性,还可以写成这样的两行:

fns = lambda s: sum(((s,int(n))for s,n in re.findall('(\D+)(\d+)','a%s0'%s)),())
print(sorted(os.listdir(), key=fns))

4. 列表

在这里插入图片描述

参考资料

[1] 用一行Python代码实现按字符串内数字大小排列字符串顺序 2021.8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12393.html

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

相关文章

抑制剂拮抗剂等小分子化合物

小分子化合物主要通过调节其蛋白靶点的活性发挥作用。目前小分子化合物的蛋白靶点主要包括酶、离子通道和受体三大类。根据靶点种类的不同,小分子化合物发挥着不同的作用。 1. 酶的抑制剂(enzyme inhibitor) 在所有的小分子化合物中&#xff…

【虹科案例】虹科脉冲发生器在半导体行业中的应用

非易失性存储单元特点 存储器研究的趋势是开发一种称为非易失性 RAM 的新型存储器,它将 RAM 的速度与大容量存储器的数据存储相结合。几年来有许多新单元类型的提议,例如 FeRAM(铁电存储器)、ReRAM(电阻式存储器&…

C++string类的模拟实现以及经验分享

文章目录1. 为什么学习string类?1.1 C语言中的字符串1.2 两个面试题2. string类的实现构造函数:拷贝构造函数赋值运算符重载:析构函数流提取运算符重载1. 为什么学习string类? 1.1 C语言中的字符串 C语言中,字符串是…

5款十分小众,却又非常好用的良心软件

今天推荐5款十分小众的软件,知道的人不多,但是每个都是非常非常好用的,有兴趣的小伙伴可以自行搜索下载。 1.杀毒软件——火绒安全软件 首先说一下国产杀软之光,这是一款电脑安全软件,病毒库更新及时,界面…

【文档+视频】Verdi基础教程

目录 前言 1.Verdi 环境配置 2.VCS 产生Verdi 波形 1、tb中加入相应的系统函数 2、makefile中加入相应的选项 3.nTrace 1、如何调用Verdi? 【重点】 2、如何查看包含的设计架构? 3、如何查寻模块实例化的位置?【重点】 4、在nTrace…

Linux网络编程11——简单的web服务器

学习视频链接 02-web大练习的概述_bilibili_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1iJ411S7UA/?p132&spm_id_frompageDriver&vd_source0471cde1c644648fafd07b54e303c905 目录 一、项目展示 二、HTTP 协议基础 2.1 HTTP协议基础。 2.2 请求消息(R…

个人博客系统

目录一、项目简介二、项目开发流程2.1 准备工作2.2 实现Vue层2.2 实现Model层2.4 实现Controller层一、项目简介 基于servlet,采用前后端分离的方式,实现个人博客系统,功能包括:登录、注销、编辑、删除博客、发布博客等. 二、项…

用了10年开源工具,换了Smartbi后,3分钟搞定一份报表

大约在20年前,中国企业开始应用国外BI软件,报表工具可以说是BI 1.0时代的代表产物。在BI软件盛行之初,大部分软件都有开源的,从系统到数据库到各类工具、应用,当时大部分企业使用的BI软件包括报表工具,也都…

外汇天眼:外汇占款是什么意思? 与外汇储备之间的差额是由哪些原因造成的?

外汇占款就是指受资国中央银行回收外汇财产而相对投放的本币。 因为人民币是是非非随意换取代币,外资企业导入后需换取成人民币才可以进到商品流通应用,国家以便外资企业兑换外币要投入很多的资产提升了贷币的需要量,产生了外汇占款。 外汇占…

线程池源码解析 3.excute() 方法

线程池源码解析—excute()方法 execute() execute 方法是线程池的核心方法,所有的方法,包括包装的 FutureTask,都是调用这个方法。 大致流程 这里只是总结了一遍大致的流程,一些细节问题见下面的流程图或者参考源码。 当提交任…

【毕业设计】大数据电商销售预测分析 - python 数据分析

文章目录1 前言2 开始分析2.1 数据特征2.2 各项投入与销售额之间的关系2.3 建立销售额的预测模型3 最后1 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始&#x…

Java8新特性 CompletableFuture

Java8新特性 CompletableFuture 什么是CompletableFuture? CompletableFuture类的设计灵感来自于 Google Guava 的 ListenableFuture 类,它实现了 Future 和 CompletionStage 接口并且新增了许多方法,它支持 lambda表达式,通过回…

【IDEA插件】这5款IDEA插件,堪称代码BUG检查神器!

随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就…

5.盒子阴影(重点)

提示:css3中新增了盒子阴影,我们可以使用box-shadow属性为盒子添加阴影。 1、语法: div{ box-shadow:"h-shadow"或者“v-shadow” } 解释: h-shadow 必须,水平阴影位置,允许负值。 v-shado…

UE4 回合游戏项目 18- 退出战斗

在上一篇(UE4 回合游戏项目 17- 进入指定区域触发战斗事件)基础上完成击败敌人从而退出战斗的功能。 效果: 步骤: 1.打开“battleScenario”蓝图,添加一个自定义事件,命名为“离开战斗” ​ 2.删除所有…

[附源码]Python计算机毕业设计_社区无接触快递栈

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

手撕二叉搜索树

目录 一、概念 二、常见操作 2.1 查找操作 2.2 插入操作 2.3 删除操作 三、模型应用 3.1 K模型 3.2 KV模型 3.3 代码完整实现 四、 性能分析 一、概念 二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树 它或者是一棵空树,或者是具有以下…

Spring整合Mybatis和Junit小案例(9)

Spring整合Mybatis和Junit环境准备步骤1:准备数据库步骤2:创建项目导入jar包步骤3:根据数据库的表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7&#xff…

5种常用格式的数据输出,手把手教你用Pandas实现

导读:任何原始格式的数据载入DataFrame后,都可以使用类似DataFrame.to_csv()的方法输出到相应格式的文件或者目标系统里。本文将介绍一些常用的数据输出目标格式。 01 CSV DataFrame.to_csv方法可以将DataFrame导出为CSV格式的文件,需要传入一个CSV文件名。 df.to_csv(done.…

在 SPRING Boot JPA 中调用带有本机查询中的参数的存储过程

配置pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…