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找到最长最短单词
奇技淫巧
- Q:对于删掉
,空格
的处理有哪些?
–>用replace和split两步走(先把全部,变成空格,再统一split空格);引入re模块,使用split函数,构造pattern直接删去 - Q:对于从列表里找最长最短元素要怎么弄?
–>因为是字符串元素,所以不能直接使用max,要加入关键词key=len
(每个元素的长度);sort同理