一道面试题引发的pythonic

本文分享了一道关于Python的测试工程师面试题及解答过程,通过不同的Pythonic方式优化代码,最终实现一行代码解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

自己写了解法:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值