求Python字符串字符排序函数及解决代码输出大量'+'的问题
问题解答
关于字符串字符排序的Python函数
Python内置的sorted()函数就能直接用来排序字符串中的字符。它接收字符串后会返回按Unicode码点排序的字符列表,搭配str.join()就能拼接成排序后的字符串。示例:
s = "3113" sorted_s = ''.join(sorted(s)) print(sorted_s) # 输出 "1133"
你的代码错误分析与修正
你代码里出现大量+的问题,根源在于多余的第二个for循环:
- 初始时
b是存储数字字符的列表,比如['1','1','3','1','3'] - 进入第二个循环后,第一次迭代就把
b赋值为'+'.join(sorted(b)),此时b变成了字符串"1+1+1+3+3" - 后续迭代会把这个字符串当成可迭代对象,每次执行
b='+'.join(sorted(b))时,sorted("1+1+1+3+3")会把所有字符排序(+的Unicode码点比数字小,会排在最前面),反复拼接后就会累积大量+。
修正方案1:简化原代码
删除多余的循环,直接排序拼接即可:
a = input() b = [] for i in a: if i != '+': b.append(i) b = '+'.join(sorted(b)) print(b)
修正方案2:更简洁的列表推导式写法
a = input() result = '+'.join(sorted([c for c in a if c != '+'])) print(result)
修正方案3:贴合输入格式的split写法
因为你的输入是+分隔的数字串,用split拆分后排序再拼接,逻辑更清晰,还能兼容多位数场景(比如"12+3+5"):
a = input() parts = a.split('+') parts.sort() result = '+'.join(parts) print(result)
内容的提问来源于stack exchange,提问作者Ali Shokri
相关产品推荐
相关产品推荐

