意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

练习-字典按值排序

来源:恒创科技 编辑:恒创科技编辑部
2022-08-22 14:40:44
需求

最近在看工作机会, 然后做了一道华为外包的笔试题.

1. 输入:  "eaaabbccccddderrfc"
2. 要求:
2.1 按字母出现次数降序排列输出, 如果次数相同,则按自然顺序排序
2.2 不能用Python 内置的排序函数
输出: c:5;a:3;d:3;b:2;e:2;r:2;f:1;

我咋眼一看, 这种送分题, 能难住我?

构造一个字典, 统计词频sorted() 按值排序即可求解用内置函数sorted()
my_str =  "eaaabbccccddderrfc"

# 统计词频
d = {}
for s in my_str:
if d.get(s):
d[s] += 1
else:
d[s] = 1

# 字典按值排序, sorted()
sorted(d.items(), key=lambda arr: arr[1], reverse=True)
[('c', 5), ('a', 3), ('d', 3), ('e', 2), ('b', 2), ('r', 2), ('f', 1)]

正准备提交, 才发现, 不能用内置, 要自己写排序, 这一下, 难度立马升级了


练习-字典按值排序

短时间内要写出排序算法数据要如何组织

本来想写个快排, 结果那一刻, 竟然写不出来, 果然平时练习和真正测试,不刷题真的搞不定, 还好会写个冒泡, 差点就凉凉了.

'''
1. 输入: "eaaabbccccddderrfc"
2. 要求:
2.1 按字母出现次数降序排列输出, 如果次数相同,则按自然顺序排序
2.2 不能用Python 内置的排序函数
输出: c:5;a:3;d:3;b:2;e:2;r:2;f:1;
'''

# 词频统计
def word_count(my_str):
"""输入一个字符串, 统计每个字母的频率"""
d = {}
for s in my_str:
if d.get(s):
d[s] += 1
else:
d[s] = 1
return d


def my_sort(lst):
"""输入一个数组, 按降序排列"""
n = len(lst)
if n == 1:
return lst
for i in range(n):
for j in range(n - 1 - i):
if lst[j] < lst[j + 1]:
# 交换顺序
lst[j], lst[j + 1] = lst[j + 1], lst[j]
return lst


if __name__ == '__main__':

my_str = "eaaabbccccddderrfc"
d = word_count(my_str)
desc_keys = my_sort(list(d.values()))
lst_ret = []
for i in desc_keys:
for k, v in d.items():
if i == v:
lst_ret.append((k, v))
d.pop(k)
break
# 输出效果
for s in lst_ret:
print(f"{s[0]}:{s[1]}", end=";")
c:5;a:3;d:3;e:2;b:2;r:2;f:1;

平时多积累, 唯手熟尔呀, 不过好像还是没有做到按自然顺序排列哦.

耐心和恒心, 总会获得回报的.



上一篇: 租用美国服务器:潜在的风险与应对策略。 下一篇: HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM)