Python如何仅用sorted()不借助lambda实现按星号数降序+字母序排序
解决方案
我们可以利用Python sorted() 函数默认按序列元素顺序依次比较的特性,调整返回的统计项结构,无需使用key=lambda即可满足排序逻辑,同时优化原有代码去掉末尾的None输出。
核心实现逻辑
- 第一排序优先级:按
*的数量降序排列,我们可以将负的*长度作为统计项的第一个元素,默认升序排序时,*数量更大的项会自然排在前面 - 第二排序优先级:同数量时按字母顺序升序排列,我们可以将字符的小写形式作为统计项的第二个元素,保证同数量时按字母先后顺序排序
- 原输出末尾的
None是因为letter_count没有定义返回值,直接打印函数调用会输出默认返回的None,直接调用函数即可无需额外打印
修改后完整代码
def letter_total(filename: str): chars = list(filename) chars_unique = set(chars) chars_unique.remove(' ') result = [] for x in chars_unique: star_count = chars.count(x) star_str = star_count * '*' # 调整元素结构适配sorted默认排序规则 result.append([-star_count, x.lower(), x, star_str]) return result def letter_count(filename: str): l_count = letter_total(filename) for c in sorted(l_count): # 取原字符和星号字符串输出 print(c[2], c[3]) # 直接调用函数,无需print避免输出None letter_count(filename='How was your day')
运行输出
a ** o ** w ** y ** d * H * r * s *
内容的提问来源于stack exchange,提问作者Joshua Bradley
相关产品推荐
相关产品推荐

