一道面试题引发的pythonic

简介: [本文出自天外归云的博客园] 今天一个朋友去面试,下面是一道测试工程师面试题(来自搜狗): 自己写了解法: # -*- coding: utf-8 -*- import re def filter_log(target,the_log): r = '['+target...

[本文出自天外归云的博客园]

今天一个朋友去面试,下面是一道测试工程师面试题(来自搜狗):

自己写了解法:

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

def filter_log(target,the_log):
    r = '['+target+']'
    target_dic = {}
    for one in target:
        target_dic[one] = 0
    for one in re.findall(r, the_log):
        target_dic[one] += 1
    return min(target_dic.items(), key=lambda x: x[1])[1]

if __name__ == '__main__':
    the_log = "CRIUCEXPLORESGOUIUSCRIUdSCdRIdUdddS"
    target = "CRIUS"
    print filter_log(target,the_log)

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

#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哈哈哈~

相关文章
|
3月前
|
消息中间件 Java 编译器
面试官:说说Lambda表达式底层原理?
面试官:说说Lambda表达式底层原理?
40 3
面试官:说说Lambda表达式底层原理?
|
5月前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点
|
7月前
|
Python
Python函数式编程思想与面试实战
【4月更文挑战第14天】Python函数式编程涉及纯函数、高阶函数、匿名函数等概念,能提高代码可读性和并发性。本文探讨其核心理念,分析面试常见问题,如纯函数副作用、高阶函数使用、lambda过度使用等,并提供应对策略。理解并熟练应用函数式编程,对于面试表现和技术提升至关重要。
47 0
|
7月前
|
C++
面试题:讲讲面向对象
面试题:讲讲面向对象
64 0
|
存储 JSON 前端开发
前端面试100道手写题(4)—— 深浅拷贝
深浅拷贝经典前端面试题,不仅仅只是实现逻辑,更加是对整个Javascript语言的实现背后一套理论,从基础数据类型到原型链一整套知识体系的熟悉程度,下面我们就从简单到困难一一实现。
136 0
|
安全 C语言 C++
进阶C语言第三章-------《字符函数和内存函数》 完整思维导图+基本练习题+深入细节+通俗易懂+知识点+建议收藏(一)
进阶C语言第三章-------《字符函数和内存函数》 完整思维导图+基本练习题+深入细节+通俗易懂+知识点+建议收藏(一)
|
C语言 C++
进阶C语言第三章-------《字符函数和内存函数》 完整思维导图+基本练习题+深入细节+通俗易懂+知识点+建议收藏(二)
进阶C语言第三章-------《字符函数和内存函数》 完整思维导图+基本练习题+深入细节+通俗易懂+知识点+建议收藏(二)
|
Python 容器
吃透Python函数进阶嵌套等知识点
吃透Python函数进阶嵌套等知识点
109 0
|
算法 安全 编译器
【c++ primer 笔记】第10章 泛型算法
♦️第10章 泛型算法 - 泛型算法是提供一个算法,对于不同类型的容器和不同类型的元素。因此叫做泛化。
138 0
【c++ primer 笔记】第10章 泛型算法
|
前端开发