如何实现根据用户自定义字母顺序对目标字符串排序?
解决自定义字母顺序排序的Python问题
嘿,我来帮你搞定这个自定义排序的问题!你的代码目前只处理了默认正序和完全逆序两种极端情况,但没法应对任意自定义的字母顺序,而且还有几个小语法/方法使用错误,我来一步步帮你修正。
原代码的问题点
- 字符串类型没有
.sort()方法,var2.sort(reverse=True)会直接报错——.sort()是列表的内置方法,字符串不可变,不能直接调用这个方法排序 - 逻辑上只判断了是否是完全逆序的字母表,没法处理比如
bacdefghijklmnopqrstuvwxyz这种自定义顺序的需求 - 默认的
sorted(var2)是按字符的Unicode码点排序,不是你需要的自定义顺序
正确的实现思路
要实现按自定义字母顺序排序,核心是让待排序字符串的每个字符,按照它在自定义字母表中的位置(索引)来排序。我们可以用sorted()函数的key参数,指定排序依据为字符在自定义字母表中的索引值。
修正后的代码
# 读取自定义字母顺序和待排序字符串 custom_order = input("Enter Alphabet in Order: ") target_str = input("Enter String to Sort: ") # 按照自定义顺序排序:用每个字符在custom_order中的索引作为排序key sorted_chars = sorted(target_str, key=lambda c: custom_order.index(c)) # 把排序后的字符列表拼接成字符串 result = ''.join(sorted_chars) print(result)
测试示例验证
当输入:
输入行1 - abcdefghijklmnopqrstuvwxyz
输入行2 - cyxbza
代码会按每个字符在正序字母表中的索引排序,输出abcxyz,符合预期。当输入:
输入行1 - zyxwvutsrqponmlkjihgfedcba
输入行2 - cyxbza
每个字符的索引是:z(0), y(1), x(2), c(23), b(24), a(25),排序后得到zyxcba,完全符合需求。
额外优化(可选)
如果自定义字母表很长,index()方法每次查找的时间复杂度是O(n),可以提前把字母和索引映射成字典,提升效率:
custom_order = input("Enter Alphabet in Order: ") target_str = input("Enter String to Sort: ") # 构建字母-索引的映射字典 order_map = {char: idx for idx, char in enumerate(custom_order)} # 用字典查找替代index(),效率更高 sorted_chars = sorted(target_str, key=lambda c: order_map[c]) result = ''.join(sorted_chars) print(result)
这样不管自定义顺序是什么样的,都能准确按照要求排序啦!
内容的提问来源于stack exchange,提问作者Kumar Katariya
相关产品推荐
相关产品推荐

