python3中list.sort弃用cmp,key的用法
来源:互联网 发布:洗发水品牌排行榜知乎 编辑:程序博客网 时间:2024/05/22 06:26
转自https://www.cnblogs.com/znyyy/p/7716077.html
废话不多说,直接上题,我们来看下解题的思路与优化过程。
题目:给定一个字符串,找出包含数字和字母的最长字段,并输出该字段及其长度,如:abc123!#abc*^123%$xyz789!~12as@!~1a,那么最长的字段就是:abc123和xyz789,长度为6。
解题思路:
1.找出文件中的特殊字符 -> 2.将特殊文字都替换成同一个字符,比如',' -> 3.将字符串按该文字分割成一个数组 -> 4.找出列表中既包含数字又包含字母最长的字符 -> 5.输出打印
分割字符串有两种方式,我们先按刚才的解题思路来做一下,找最长字符串方法为设计两个list,一个存字符串,一个存其长度,求出最长长度,循环打印字符,条件为字符长度等于最长长度,代码如下:
import stringstr='#g5$@sdfg45$%dgf&sdfg46&hs[][,.564~kj!k23h~jk!nj1't=string.punctuationfor i in t: str=str.replace(i,',')lis=str.split(',')new_lis=[]lens=[]for i in lis: if not i.isdigit() and not i.isalpha() and len(i)!=0: new_lis.append(i) lens.append(len(i))for i in new_lis: lens.sort() if len(i)==lens[-1]: print('符合题意的字段有:%s,长度为:%s'%(i,len(i)))
下面对其进行优化两点:1.字符串切割用正则 2.找最长字符的方式
这里需要介绍下sort、sorted函数:
python3 sorted取消了对cmp的支持,格式:sorted(iterable,key=None,reverse=False),key接受一个函数,这个函数只接受一个元素,默认为None;reverse是一个布尔值。如果设置为True,列表元素将被倒序排列,默认为False。
key的作用原理:key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None ,下面看几个例题:
#1.按照年龄来排序students = [('牛牛', 'A', 15), ('道长', 'B', 12), ('大师兄','B', 10)]students=sorted(students,key=lambda s:s[2])print(students)#结果:[('大师兄', 'B', 10), ('道长', 'B', 12), ('牛牛', 'A', 15)]#2.一个字符串排序,排序规则:小写<大写<奇数<偶数,# 原理:先比较元组的第一个值,FALSE<TRUE,如果相等就比较元组的下一个值,以此类推。# 先看一下Boolean value 的排序:# print(sorted([True,Flase]))===>结果[False,True]# Boolean 的排序会将 False 排在前,True排在后 . s='9a13C85c7B24A6b' #正确的顺序应该为:abcABC135792468lis=sorted(s,key=lambda x:(x.isdigit(),x.isdigit() and int(x)%2==0,x.isalpha() and x.isupper(),x.isalpha() and x.lower()))print(''.join(lis))# 1.x.isdigit()的作用是把数字放在前边,字母放在后边.# 2.x.isdigit() and int(x) % 2 == 0的作用是保证奇数在前,偶数在后。# 3.x.isupper()的作用是在前面基础上,保证字母小写在前大写在后.# 4.最后的x表示在前面基础上,对所有类别数字或字母排序。
根据上面的sort函数的排序原理,优化代码如下:
import string,restr='#sdfg45$@sdfg45$%dgf&sdfg46&hs[][,.564~kj!k122h~j`k!n1j'lis=re.split(r'\W',str)dic={}for i in lis: if not i.isdigit() and not i.isalpha() and len(i) != 0: dic[i]=len(i)new_lis=sorted(dic,key=lambda s:s[1],reverse=True)print(new_lis)for i in new_lis: if len(i)==len(new_lis[0]): print('最长的字符串有:%s'%i)
阅读全文
0 0
- python3中list.sort弃用cmp,key的用法
- Sort 函数(cmp用法的介绍)
- python sort sorted key cmp
- Python3 的list.sort函数
- sort中cmp函数的编写问题
- C#中List的排序用法(Sort)
- C#中List的排序用法(Sort)
- C#中List的排序用法(Sort)
- C#中List的排序用法(Sort)
- 用list.sort(key)排序
- sort的cmp写法
- python3中替换python2中cmp函数的新函数
- python3中替换python2中cmp函数的新函数
- Linux中cmp命令的用法
- python3 如何实现python2 中cmp()函数的功能
- C++ 中sort 函数及 cmp 自定义规则的使用
- C++ 中sort 函数及 cmp 自定义规则的使用
- STL中List 的sort 比较 用法示例
- python--leetcode389. Find the Difference
- python 遇到的问题(一)
- solr集群的搭建
- 通用方法 Java实现excel表格转成json
- C中标识符有哪些类型的作用域?
- python3中list.sort弃用cmp,key的用法
- 如何设置u盘写保护防止u盘拷贝文件
- TensorFlow学习笔记(三):TensorFlow实现逻辑回归模型
- Android 屏幕显示
- Linux命令之pwd
- Codeforces Round #445 (Div. 2) D
- java spring-webflux netty
- HDOJ2096 小明A+B
- 表单验证