文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python3中list.sort弃用c

2023-01-31 02:08

关注

转自https://www.cnblogs.com/znyyy/p/7716077.html

废话不多说,直接上题,我们来看下解题的思路与优化过程。

  题目:给定一个字符串,找出包含数字和字母的最长字段,并输出该字段及其长度,如:abc123!#abc*^123%$xyz789!~12as@!~1a,那么最长的字段就是:abc123和xyz789,长度为6。

  解题思路:

  1.找出文件中的特殊字符  ->  2.将特殊文字都替换成同一个字符,比如','  ->  3.将字符串按该文字分割成一个数组  ->  4.找出列表中既包含数字又包含字母最长的字符  ->  5.输出打印

  分割字符串有两种方式,我们先按刚才的解题思路来做一下,找最长字符串方法为设计两个list,一个存字符串,一个存其长度,求出最长长度,循环打印字符,条件为字符长度等于最长长度,代码如下:

复制代码
import string
str='#g5$@sdfg45$%dgf&sdfg46&hs[][,.564~kj!k23h~jk!nj1'
t=string.punctuation
for 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' #正确的顺序应该为:abcABC135792468
lis=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,re
str='#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)
复制代码

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯