分析
题目说的是识别字符,字符可能在图片的书上,可能在页面的源码里面。机智的我马上按了个F12,发现一大堆混乱的字符,要求就是从中找出稀有的字符,智商感人的我还对所有出现字符的次数排了个序~~~,其实只要判断是a-z的字符把他拼起来就是了。
领略下我的智商吧~
dict_count = {}
for ind, ch in enumerate(mess_str):
if dict_count.get(
ord(ch)):
dict_count[
ord(ch)] +=
1
else:
dict_count[
ord(ch)] =
1
heap = []
char_str =
""
for ch_int, count in dict_count.items():
heapq.heappush(heap, (count, ch_int))
if ord(
'a') <= ch_int <=
ord(
'z'):
char_str +=
chr(ch_int)
print(char_str)
res = [heapq.heappop(heap)
for i in range(len(heap))]
print(res)
res_str =
"".
join(
chr(va[
1])
for va in res)
print(res_str)
Learn
智商感人也是有好处的,heapq模块技能点Get!!! heapq:python中的堆模块,可以很容易的实现优先队列,求最大N个元素,最小N个元素。嘛,这本来就是堆的最简单应用
基本接口:
heappush : 进堆heappop : 最小值出堆heappushpop : 新元素进堆,然后再最小值出堆,相当于前面两个接口的组合heapify : 把一个列表转化成堆heapreplace : 先出堆,再进堆,保持堆大小,和pushpop顺序不一样哦,相比分步调用更有效率nlargest : 返回最大N个元素nsmallest : 返回最小N个元素merge : 这就有点复杂了,merge的工作是合并多个可枚举的数据,并维持堆属性。有3个参数(*iterables, key=None, reverse=None)其中key和reverse是在3.5之后才添加的。
key:是个函数返回用于对列表数据处理返回用于比较的值reverse:是个布尔值,如果设置为true那么所有比较结果将反转。
ref: [-] python heapq文档