一道面试题引发的pythonic

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道面试题引发的pythonic相关的知识,希望对你有一定的参考价值。

一道测试工程师面试题(来自搜狗):

技术分享

自己写了解法:

# -*- coding: utf-8 -*-
import re

#从整体log中过滤出有用的部分,缩小搜索范围
def filter_log(the_log):
    r = r[CRIUS]
    return re.findall(r, the_log)

#统计每个目标字符出现过的最少次数,即最少出现过几次完整log
def check_count(target,target_log):
    target_dic = {}
    for one in target:
        target_dic[one] = 0
    for one in target_log:
        target_dic[one]+=1
    return min(target_dic.items(), key=lambda x: x[1])[1]

if __name__ == __main__:
    the_log = "CRIUCEXPLORESGOUIUSCRIUdSCdRIdUdddS"
    target_log = filter_log(the_log)
    target = "CRIUS"
    count = check_count(target,target_log)
    print count

写了解法以后感觉到没有显现出python的优势,找大师兄学了一些pythonic的写法,比如将一个列表创建成字典有以下两种写法可以一行搞定:

#target_dic = {one:0 for one in list}
#target_dic = dict.fromkeys(list, 0)

例如min()可以根据key也可以不用,不用key的话语句就会更短一些:

import re,collections

the_log = "CRIUCEXPLORESGOUIUSCRIUdSCdRIdUdddS"
target = "CRIUS"
print min(collections.Counter(re.findall([+target+], the_log)).items(), key=lambda x: x[1])[1]
#print min(collections.Counter(re.findall(‘[‘+target+‘]‘, the_log)).values())

如果测试字符串“CRIUCEXPLORESGOUIUSCRIUdSCdRIdUdddS”自备的话,两行搞定:

import re,collections
print min(collections.Counter(re.findall([CRIUS], raw_input("Input:"))).values())

原来还有import内置函数!现在就一行了:

print min(__import__(collections).Counter(__import__(re).findall([CRIUS], raw_input("Input:"))).values())

是不是特别好玩!O(∩_∩)O哈哈哈~

以上是关于一道面试题引发的pythonic的主要内容,如果未能解决你的问题,请参考以下文章

论JDK源码的重要性:一道面试题引发的无限思考

一道面试题引发的数据库行列转换实践

一道号称“史上最难”的java面试题引发的线程安全思考

一道号称“史上最难”的java面试题引发的线程安全思考

一道Javascript面试题引发的血案

new new Foo().getName() 一道前端面试题引发的思考