一家四口,满门被裁!只有我妈还有工作!
刚刷到个帖子,说是一家四口全被裁员,就剩老妈还在岗,瞬间联想到今年裁员潮简直比代码里的bug还难缠。作为程序员我觉得,这种“满门被裁”的剧情真的让人无语,像极了线上服务器突然全挂,只有个备份还在坚挺。
这几年职场就像版本更新,不光是你能力行不行,运气、赛道、公司命运全都绑一起,真没什么绝对安全的选择。你可以写最牛的代码,但碰上业务裁撤、行业动荡,也只能喝西北风。
不过话说回来,家里还有个“核心进程”在跑,说明生活总有希望。现在的局势下,谁都不敢说稳,就像上线的程序,永远要做好随时打补丁的准备。大家互相撑一撑,别轻易宕机,机会说不定哪天又重启了。【备注:文末可领最新资料】
面试题:统计词频
其实这个问题还挺常见的,就是让你写个小程序,把一段文本里面每个单词出现的次数都统计出来。你别小看这个,啥爬虫、日志分析、甚至有时候做点NLP预处理都得用,真的是随手拎起来就用的那种小技能。
有一回我印象特别深,凌晨一点多,项目组那个小王突然给我发代码,说他抓的文本太脏了,什么换行、标点乱七八糟,单词还大小写不统一,统计出来的结果全是坑。我当时正准备睡觉,一下给我整精神了。我说你先别急,正常流程其实挺简单的,先把所有字母都变成小写,这样你“Hello”和“hello”就算一样的了。然后再想办法把那些标点、回车什么的都给干掉。
用Python有个最偷懒的写法,直接split(),但是你得保证分割的基础还算干净。像我比较懒的时候,就用re(正则表达式),一行就全都切好了:
import re
text = "hello, world! Hello Python. hello?"
words = re.findall(r'\b\w+\b', text.lower())
你看,这一步下来所有单词都规整成小写了,也只剩单词,没有标点了。
接下来就是怎么数呗。之前我们组那个实习生,第一次写词频统计,写了一堆if,还搞什么for嵌套,代码又臭又长,查一次词还O(n),我一看直接无语。其实Python最简单粗暴的写法,collections.Counter直接拿来用,舒服得一批:
from collections import Counter
counter = Counter(words)
print(counter)
你们要是喜欢自己写,可以用字典:
freq = {}
for w in words:
if w in freq:
freq[w] += 1
else:
freq[w] = 1
但是没必要为难自己,能用库就用库,面试官也喜欢你会偷懒。
有时候面试喜欢加码,说你给我输出出现频率最高的前3个单词怎么整?直接这样:
for word, count in counter.most_common(3):
print(word, count)
顺手多加一行,效率又快,代码还短。是不是,比写那一堆排序、for循环来回折腾强多了?
反正你看,词频统计吧,说难不难,说简单也有细节。比如你是不是得考虑英文里的缩写、数字啥的,句子里有tab、有多余空格,最好正则切一切,切干净点。
我那天和小王聊完这个,转头发现微信有人又问我Redis的坑,哎,说实话,做程序员真的,吃个宵夜都闲不住。
大概就这样,反正下回碰到类似问题别慌,Python写起来巨快,记住核心思路就是——规整文本、分词、计数,剩下就是怎么偷懒怎么来。你们要是还遇到什么特别脏的输入,发给我,我帮你调,顺便还能蹭个宵夜吃。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领