题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

#本题有两个关键点,
#一是:sorted函数的key参数可以实现按照key传入的函数变换后的结果进行排序,而后恢复key传入函数的原始值。
#即:key值传入小写转换大写函数,则所有字母均按照转换后的大写形式排序,排序后仍恢复原式大小写。
#二是:list.pop(n)函数不仅去掉列表list第n位置的元素,同时返回该值。print函数配和sep='',可以打印*object

import sys

st = input()
letter_list = sorted([i for i in st if i.isalpha()],key=str.upper)
#先找到字母,然后按大小写排序并且需要保持位置不变
res = [letter_list.pop(0) if v.isalpha() else v for i,v in enumerate(st)]
print(*(res),sep='')


###以下换一种写法,不采用sorted的key参数,麻烦很多。
import sys
import re
st = input()
def sortL(st):##按照大写字母排序的写法,作用同第9行.
  letter_set = sorted(set([x.lower()+'|'+x.upper() for x in st])) 
  #找到字符串中的大小写字母组,然后按字母排序
  letter_list = [''.join(re.findall(x,st)) for x in letter_set if x[0].isalpha()]
  #逐个从原字符串里搜索拼接
  letter_list = list(''.join(letter_list)) #输出为一个连续的大小写字符串
  return letter_list
letter_list = sortL(st)
for i in range(len(st)): #对原字符串逐位遍历,如果是字母则忽略,否则将st位置的字符插入到该位置。
  if st[i].isalpha()==False:
    letter_list.insert(i,st[i])
print(''.join(letter_list)) #最后用空值连接成字符串输出

全部评论

相关推荐

10-16 15:48
算法工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务