【python基础刷题--30.最长最短单词】

题目

最长最短单词
在这里插入图片描述

Code

-法1(使用replace先把,变成空格,再一起split掉)

str=input()
str=str.replace(',',' ')
str=str.split()
str_long=max(str,key=len)
print(str_long)
str_short=min(str,key=lambda x:len(x))
print(str_short)

代码解析

使用replace先把变成空格,再一起split掉,再用max和min找长度最大最小的单词;

-法2(引入re模块的split删除(,+空格))

import re
# str=re.split(r",| ",input())  这是我第一次写的,需要再加一个for循环排出所有的空,才能accepted
# str=[x for x in str if x]
str=re.split(r"\W+",input())#如果改用这个pattern就可以不需要一次for循环了\W就是排除所有非字母的字符,用在split里就是删掉所有非字母字符
str_long=max(str,key=len)#这个写法有两种,一个直接关键词=len;一个是使用lambda函数(λ)
print(str_long)
str_short=min(str,key=lambda x:len(x))
print(str_short)

代码解析

引入re模块,使用re的split一次性去掉,空格,再用max,min求;

  • 下图是re模块的split函数用法和不引入re的split函数有略微区别,但是功能是一样的,而且都是返回列表
    (还有包含 加() 的用法,和不加也有区别,就自己看吧)
    在这里插入图片描述

-法3(不使用max,min,而是使用sort来找最大最小)

str=input()
str=str.replace(',',' ')
str=str.split()
str.sort(key=lambda x:len(x),reverse=True)
print(str[0])
str.sort(key=lambda x:len(x))
print(str[0])

#中间过程结果:
#第一次排序后['Programming', 'University', 'studying', 'language', 'Peking', 'am', 'in', 'I', 'C']
#第二次排序后['I', 'C', 'am', 'in', 'Peking', 'studying', 'language', 'University', 'Programming']

代码解析

不使用re,前面处理,空格的方法同法1,在找最长最短单词的时候使用sort()函数修改原列表元素顺序
注:要注意相同长度的单词顺序。如果只排序一次,然后取[0]和[-1]作为最长最短是不对的,见上中间过程

解题思路

1.先把,空格这些不是单词的东西去除掉,获得只有各个单词的列表;
2.再通过len找到最长最短单词

奇技淫巧

  1. Q:对于删掉,空格的处理有哪些?
    –>用replace和split两步走(先把全部,变成空格,再统一split空格);引入re模块,使用split函数,构造pattern直接删去
  2. Q:对于从列表里找最长最短元素要怎么弄?
    –>因为是字符串元素,所以不能直接使用max,要加入关键词key=len(每个元素的长度);sort同理
  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值