王亟亟的Python学习之路(九)-sorted()排序以及简单字符串处理

简介:

转载请注明出处:王亟亟的大牛之路

这一片就讲2个知识点,1排序,2字符串处理

Python在排序操作的这一部分做了很好的封装,我们不需要写太多代码就可以实现排序的效果,先贴下Java的实现。(这里不是黑Java!!!!)

public class 直接插入排序 {

    public static void main(String[] args) {
        int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1};
        System.out.println("排序之前:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        //直接插入排序
        for (int i = 1; i < a.length; i++) {
            //待插入元素
            int temp = a[i];
            int j;
            /*for (j = i-1; j>=0 && a[j]>temp; j--) {
                //将大于temp的往后移动一位
                a[j+1] = a[j];
            }*/
            for (j = i-1; j>=0; j--) {
                //将大于temp的往后移动一位
                if(a[j]>temp){
                    a[j+1] = a[j];
                }else{
                    break;
                }
            }
            a[j+1] = temp;
        }
        System.out.println();
        System.out.println("排序之后:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }

}
public class 二分插入排序 {
    public static void main(String[] args) {
        int[] a={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};
        System.out.println("排序之前:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        //二分插入排序
        sort(a);
        System.out.println();
        System.out.println("排序之后:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }

    private static void sort(int[] a) {
        for (int i = 0; i < a.length; i++) {
            int temp = a[i];
            int left = 0;
            int right = i-1;
            int mid = 0;
            while(left<=right){
                mid = (left+right)/2;
                if(temp<a[mid]){
                    right = mid-1;
                }else{
                    left = mid+1;
                }
            }
            for (int j = i-1; j >= left; j--) {
                a[j+1] = a[j];
            }
            if(left != i){
                a[left] = temp;
            }
        }
    }
}

类似的还有冒泡什么的Python在这部分的封装就相对很简便,像这样

list = [1, 3, -1, 8, 9]
print('排序前', list, '基础排序后', sorted(list))

结果:
排序前 [1, 3, -1, 8, 9] 基础排序后 [-1, 1, 3, 8, 9]

当然和之前的map等高阶方法一样,有可选项,也可以使用例子里最简单的排序。(所以被排的也都是iterable对象)

我们来看一下sorted的实现

def sorted(*args, **kwargs): # real signature unknown
    """
    Return a new list containing all items from the iterable in ascending order.

    A custom key function can be supplied to customise the sort order, and the
    reverse flag can be set to request the result in descending order.
    """
    pass

白话出来就是

sorted(iterable[,cmp,[,key[,reverse=True]]])

可选的参数有三个,cmp、key和reverse。
1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。

sorted()方法当然也有list.sort()方法,但是list.sort()的方法会把原迭代器的数据给替换掉,所以看你的具体需求了。

从Python2.4开始,list.sort()和sorted()方法都添加了一个key参数来说明一个函数,这个函数在做比较之前会对list中的每个元素进行调用。

像这样,把本来的基础排序按照一定的业务需要来排序

print('按照绝对值排序', sorted(list, key=abs))

结果:
按照绝对值排序 [1, -1, 3, 8, 9]

拆拆看字符串可不可以分解

daXie = "Wo de ming Zi Jiao Wjj"
print('拆分字符串', sorted(daXie.split(), key=str.lower))

结果:
拆分字符串 ['de', 'Jiao', 'ming', 'Wjj', 'Wo', 'Zi']

字符串也能拆!

那么复杂的对象怎么操作?类似于元组里的某个元素的某个属性。

people = [('Wjj1', 'A', 99), ('Wjj2', 'B', 100), ('Wjj3', 'C', 45), ('Wjj4', 'D', 75), ]

print('符合对象排序  成绩 : ',sorted(people,key=lambda person:person[2]))
print('符合对象排序 等级 : ',sorted(people,key=lambda person:person[1]))


结果:

符合对象排序  成绩 :  [('Wjj3', 'C', 45), ('Wjj4', 'D', 75), ('Wjj1', 'A', 99), ('Wjj2', 'B', 100)]
符合对象排序 等级 :  [('Wjj1', 'A', 99), ('Wjj2', 'B', 100), ('Wjj3', 'C', 45), ('Wjj4', 'D', 75)]

分别按照等级(英语字符),成绩做排序的基准,使用起来是不是很简便?


再介绍些简单的字符串处理

先呈现些大小写的操作:

daXie = "WO SHI Wjj"
print('大写字变小写 : ', daXie.lower())

结果:
大写字变小写 :  wo shi wjj

xiaoXie = 'wo shi Wjj'
print('小写变大写 : ', xiaoXie.upper())

结果:
小写变大写 :  WO SHI WJJ

print('大小写互换 : ', xiaoXie.swapcase(), '    ', daXie.swapcase())

结果:
大小写互换 :  WO SHI wJJ      wo shi wJJ

print('首字母大写', xiaoXie.title())

结果:
首字母大写 : Wo Shi Wjj

再是格式化操作

print('左对齐 : ', daXie.ljust(15, "a"))

结果:
左对齐 :  WO SHI Wjjaaaaa

print('右缩进 : ', daXie.rjust(15, 'b'))

结果:
右缩进 :  bbbbbWO SHI Wjj

print('居中处理 : ', xiaoXie.center(15, 'c'))

结果:
居中处理 :  cccwo shi Wjjcc

print('填充处理 : ', daXie.zfill(15))

结果:
填充处理 :  00000WO SHI Wjj

如果要填充字符串就填充不填充就空格(不能填充超过一个字符,会报错 所以一般也就用空格了 zfill()默认为0)

有添加缩进的操作,当然也有去掉缩进的效果

print('去掉两边的空格 : ', '           abc  cc  dd        '.strip())

结果:
去掉两边的空格 :  abc  cc  dd


print('去掉左边空格 : ', '           abc  cc  dd        '.lstrip())

结果:
去掉左边空格 :  abc  cc  dd        


print('去掉右边的空格 : ', '           abc  cc  dd        '.rstrip())

结果:
去掉右边的空格 :             abc  cc  dd

高级语言相对于老牌的语言易用性还是有很多的提升的,但是说到底还是一样的,语言毕竟也只是工具,不过多一门手艺多个出路,哈哈哈 春节愉快!!

源码地址:https://github.com/ddwhan0123/PythonExample/blob/master/示例/l7Demo.py

目录
相关文章
|
4月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
327 1
|
4月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
395 0
|
4月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
463 1
|
4月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
563 1
|
4月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
230 4
|
5月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
4月前
|
数据库连接 API 数据安全/隐私保护
Python字符串处理:超越split与join的五大高效技巧
本文介绍Python字符串处理的五大高效技巧:strip家族精准去字符、partition分割结构化数据、count统计子串、高级比较方法及正则应用,结合真实案例与性能对比,提升开发效率。
244 0
|
7月前
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。
|
7月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异

推荐镜像

更多