王亟亟的Python学习之路(九)-sorted()排序以及简单字符串处理
来源:互联网 发布:ubuntu 改变文件权限 编辑:程序博客网 时间:2024/06/08 16:24
转载请注明出处:王亟亟的大牛之路
这一片就讲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 wjjxiaoXie = 'wo shi Wjj'print('小写变大写 : ', xiaoXie.upper())结果:小写变大写 : WO SHI WJJprint('大小写互换 : ', xiaoXie.swapcase(), ' ', daXie.swapcase())结果:大小写互换 : WO SHI wJJ wo shi wJJprint('首字母大写', xiaoXie.title())结果:首字母大写 : Wo Shi Wjj
再是格式化操作
print('左对齐 : ', daXie.ljust(15, "a"))结果:左对齐 : WO SHI Wjjaaaaaprint('右缩进 : ', daXie.rjust(15, 'b'))结果:右缩进 : bbbbbWO SHI Wjjprint('居中处理 : ', xiaoXie.center(15, 'c'))结果:居中处理 : cccwo shi Wjjccprint('填充处理 : ', daXie.zfill(15))结果:填充处理 : 00000WO SHI Wjj
如果要填充字符串就填充不填充就空格(不能填充超过一个字符,会报错 所以一般也就用空格了 zfill()默认为0)
有添加缩进的操作,当然也有去掉缩进的效果
print('去掉两边的空格 : ', ' abc cc dd '.strip())结果:去掉两边的空格 : abc cc ddprint('去掉左边空格 : ', ' abc cc dd '.lstrip())结果:去掉左边空格 : abc cc dd print('去掉右边的空格 : ', ' abc cc dd '.rstrip())结果:去掉右边的空格 : abc cc dd
高级语言相对于老牌的语言易用性还是有很多的提升的,但是说到底还是一样的,语言毕竟也只是工具,不过多一门手艺多个出路,哈哈哈 春节愉快!!
源码地址:https://github.com/ddwhan0123/PythonExample/blob/master/示例/l7Demo.py
- 王亟亟的Python学习之路(九)-sorted()排序以及简单字符串处理
- 王亟亟的Python学习之路(二)-项目创建以及要点提及
- 王亟亟的Python学习之路(三)-基础语法以及基本数据类型
- 王亟亟的Python学习之路(一)-环境搭建
- 王亟亟的Python学习之路(四)-循环,条件,Range,list和tuple
- 王亟亟的Python学习之路(五)-dictionary,set,函数,函数参数
- 王亟亟的Python学习之路(六)-递归,迭代,列表生成式
- 王亟亟的Python学习之路(七)-date,continue,迭代对象,生成器
- 王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()
- 王亟亟的Python学习之路(10)-匿名函数
- 王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包
- python排序之sorted
- python之简单的处理坐标排序问题
- python学习笔记(九)异常处理
- PHP学习笔记之字符串的简单处理
- 学习廖雪峰python之sorted()
- sorted 的简单学习
- SDUT ACM 实验九 简单字符串排序
- 关于冒泡排序的最简单方法和进一步的优化
- 个人学习-java-面向对象
- 张量研究
- api接口
- Light OJ 1126 Building Twin Towers (DP)
- 王亟亟的Python学习之路(九)-sorted()排序以及简单字符串处理
- 深入理解Java虚拟机----(十)Java内存模型与线程
- VS2013学会使用spy++
- hdu 5295 Unstable
- Educational Codeforces Round 7(D)构造(STL deque)
- Linux NUMA优化(1)
- spring声明式事务基本配置
- POJ 2602 Superlong sums(高精度)
- usaco 1.3.4 combo