如何对单词列表进行逐字母对应比较并按字母优先级排序输出?
按逐位ASCII值降序排序单词列表
要实现逐位比较单词对应位置字符的ASCII值,优先输出ASCII值更高的单词,本质是对单词列表做「反向字典序」排序(字典序为ASCII升序,此处需降序)。以下是具体实现方案:
核心逻辑
排序规则拆解:
- 从第一个字符开始,逐位对比两个单词的字符ASCII值,ASCII值更大的单词排在前面;
- 若当前位置字符相同,则继续比较下一个位置;
- 若其中一个单词是另一个的前缀(比如
app和apple),则更长的单词排在前面(多出来的字符ASCII值大于空值)。
代码实现(Python)
方法1:利用元组比较(简洁高效)
Python可直接将单词转换为字符ASCII值的元组,借助sorted函数的反向排序实现需求:
words = ["banana", "apple", "cherry", "date", "app"] # 将每个单词转为ASCII值元组,按元组降序排序 sorted_words = sorted(words, key=lambda x: tuple(ord(c) for c in x), reverse=True) print(sorted_words) # 输出: ['date', 'cherry', 'banana', 'apple', 'app']
方法2:自定义比较函数(灵活可控)
如果需要调整边界规则(比如让前缀短单词优先),可以用functools.cmp_to_key自定义比较逻辑:
from functools import cmp_to_key def compare(a, b): min_length = min(len(a), len(b)) # 逐位比较ASCII值 for i in range(min_length): ord_a, ord_b = ord(a[i]), ord(b[i]) if ord_a != ord_b: # 降序:a的ASCII更大则返回-1,让a排在b前面 return ord_b - ord_a # 前缀相同的情况:更长的单词排前面(若要短单词优先,改为return len(a) - len(b)) return len(b) - len(a) words = ["banana", "apple", "cherry", "date", "app"] sorted_words = sorted(words, key=cmp_to_key(compare)) print(sorted_words) # 输出: ['date', 'cherry', 'banana', 'apple', 'app']
关键说明
- 两种方法都严格遵循逐位ASCII比较规则;
- 方法1的元组比较是Python内置高效逻辑,代码更简洁,适合大多数场景;
- 方法2的自定义函数可灵活修改边界规则,比如调整前缀单词的排序优先级。
内容的提问来源于stack exchange,提问作者Mohammad Jaber
相关产品推荐
相关产品推荐

