王亟亟的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

目录
相关文章
|
20天前
|
机器学习/深度学习 前端开发 算法
学习Python需要多久?
【7月更文挑战第6天】学习Python需要多久?
24 5
|
26天前
|
机器学习/深度学习 算法 Python
使用Python实现深度学习模型:元学习与模型无关优化(MAML)
使用Python实现深度学习模型:元学习与模型无关优化(MAML)
37 0
使用Python实现深度学习模型:元学习与模型无关优化(MAML)
|
17天前
|
供应链 数据挖掘 Python
后劲真大,我愿称之为学习python的“圣经”
很多小伙伴都在学习Python,但是爱看书的找不到适合自己的,这本书可以完美的解决你的问题,还能帮助到很多需要处理数据,做Excel自动方面的。 学习数据分析的好处众多,无论是对于个人职业发展还是企业的运营决策都具有重要意义。
|
3天前
|
机器学习/深度学习 数据采集 算法
Python编程语言进阶学习:深入探索与高级应用
【7月更文挑战第23天】Python的进阶学习是一个不断探索和实践的过程。通过深入学习高级数据结构、面向对象编程、并发编程、性能优化以及在实际项目中的应用,你将能够更加熟练地运用Python解决复杂问题,并在编程道路上走得更远。记住,理论知识只是基础,真正的成长来自于不断的实践和反思。
|
3天前
|
Python
Python小技巧:一种字符串的排序方式
Python小技巧:一种字符串的排序方式
13 0
|
7天前
|
JSON 中间件 数据处理
实践出真知:通过项目学习Python Web框架的路由与中间件设计
【7月更文挑战第19天】探索Python Web开发,掌握Flask或Django的关键在于理解路由和中间件。路由连接URL与功能,如Flask中@app.route()定义请求响应路径。中间件在请求处理前后执行,提供扩展功能,如日志、认证。通过实践项目,不仅学习理论,还能提升构建高效Web应用的能力。示例代码展示路由定义及模拟中间件行为,强调动手实践的重要性。
|
15天前
|
机器学习/深度学习 数据采集 算法
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
|
15天前
|
分布式计算 并行计算 算法
探索排序的宇宙奥秘:Python中归并排序的并行处理与分布式应用!
【7月更文挑战第11天】归并排序是一种分治算法,适用于并行和分布式处理。在Python中,利用`concurrent.futures`可实现并行归并排序,但因GIL限制,可能需借助`multiprocessing`或GPU库。分布式归并排序则通过分布式框架如Apache Spark处理大规模数据,每个节点独立排序后进行网络合并。并行与分布式技术提升了处理大数据的速度和效率。**
23 9
|
22天前
|
数据采集 SQL 关系型数据库
Python学习路线【对标大厂Python开发工程师的招聘要求,并推荐优质免费资源】打卡学习不迷茫
Python学习路线【对标大厂Python开发工程师的招聘要求,并推荐优质免费资源】打卡学习不迷茫
75 14
|
14天前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
【7月更文挑战第12天】Python的快速排序**以分治策略实现高效排序,平均时间复杂度$O(nlogn)$,优于$O(n^2)$的冒泡排序。基本实现通过选取基准元素分割数组,然后递归排序两部分。优化版使用随机基准避免最坏情况。对比显示优化后排序更稳定,适应不同数据集,提升程序性能。
26 4