Python自动化测试笔试面试题精选


Posted in Python onMarch 12, 2020

前言

随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力。因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点。

  • 基本编码能力及思维逻辑
  • 基本数据结构(顺序表、链表、队列、栈、二叉树)
  • 基本算法(排序、查找、递归)及时间复杂度

除基本算法之外,笔试面试中经常会考察以下三种思想:

  • 哈希
  • 递归
  • 分治

哈希

哈希即Python中的映射类型,字典和集合,键值唯一,查找效率高,序列(列表、元祖、字符串)的元素查找时间复杂度是O(n),而字典和集合的查找只需要O(1)。
因此哈希在列表问题中主要有两种作用:

去重

优化查找效率

例题1:列表去重#

列表去重在不考虑顺序的情况下可以直接使用set()转换(转换后会自动排序),需要保持顺序可以使用字典构建的fromkeys()方法,利用字典键值的唯一性去重。

不考虑顺序:

l = [2,1,2,3,4,5,6,6,5,4,3,2,1]
result = list(set(l))
print(result)

运行结果:

[1, 2, 3, 4, 5, 6]

考虑顺序:

l = [2,1,2,3,4,5,6,6,5,4,3,2,1]
result = list({}.fromkeys(l).keys())
print(result)

运行结果:

[2, 1, 3, 4, 5, 6]

例题2:分组

一串字母数字组合的字符串,找出相同的字母或数字,并按照个数排序。

l = [1,2,3,'a','b','c',1,2,'a','b',3,'c','d','a','b',1]
set1 = set(l)
result = [(item, l.count(item)) for item in set1]
result.sort(key=lambda x:x[1], reverse=True)
print(result)

这里使用哈希的键值不重复性。当然也可以使用python自带的groupby函数,代码如下:

from itertools import groupby

l = [1,2,3,'a','b','c',1,2,'a','b',3,'c','d','a','b',1]
l.sort(key=lambda x: str(x)) # 分组前需要先排序
result = []
for item, group in groupby(l, key=lambda x: str(x)):
  result.append((item, len(list(group))))
result.sort(key=lambda x:x[1], reverse=True)
print(result)

例题3:海量数据找出top K的数据#

对于小数据量可以使用排序+切片,而对于海量数据,需要考虑服务器硬件条件。即要考虑时间效率,也要考虑内存占用,同时还要考虑数据特征。如果大量的重复数据,可以先用哈希进行去重来降低数据量。

这里我们使用生成器生成1000万个随机整数,求最大的1000个数,生成随机数的代码如下:

import random
import time
n = 10000 * 1000
k = 1000
print(n)
def gen_num(n):
  for i in range(n):
    yield random.randint(0, n)
l = gen_num(n)

不限内存可以直接使用set()去重+排序

start = time.time()
l = list(set(l))
result = l[-k:]
result.reverse()
print(time.time()-start)

1000w个数据会全部读入内存,set后列表自动为递增顺序,使用切片取-1000到最后的即为top 1000的数

使用堆排可以节省一些内存

start = time.time()
result = heapq.nlargest(k, l)
print(time.time()-start)

这里是用来Python自带的堆排库heapq。使用nlargest(k,l)可以取到l序列,最大的k个数。

较小内存可以分治策略,使用多线程对数据进行分组处理(略)

例题4:两数之和#

l=[1,2,3,4,5,6,7,8] 数据不重复,target=6,快速找出数组中两个元素之和等于target 的数组下标。

注意,不要使用双重循环,暴力加和来和target对比,正确的做法是单层循环,然后查找target与当前值的差,是否存在于列表中。

但是由于列表的in查询时间复杂度是O(n),即隐含了一层循环,这样效率其实和双重循环是一样的,都是O(n^2)。

这里就可以使用哈希来优化查询差值是否在列表中操作,将O(n)降为O(1),因此总体的效率就会变成O(n^2)->O(n)。

l = [1,2,3,4,5,6,7,8]
set1 = set(list1)  # 使用集合已方便查找
target = 6

result = []
for a in list1:
  b = target - a
  if a < b < target and b in set1:  # 在集合中查找,为避免重复,判断a为较小的那个值
    result.append((list1.index(a), list1.index(b)))  # 列表index取下标的操作为O(1) 
print(result)

递归问题

递归是一种循环调用自身的函数。可以用于解决以下高频问题:

  • 阶乘
  • 斐波那切数列
  • 跳台阶、变态跳台阶
  • 快速排序
  • 二分查找
  • 二叉树深度遍历(前序、中序、后序)
  • 求二叉树深度
  • 平衡二叉树判断
  • 判断两颗树是否相同

递归是一种分层推导解决问题的方法,是一种非常重要的解决问题的思想。递归可快速将问题层级化,简单化,只需要考虑出口和每层的推导即可。

如阶乘,要想求n!,只需要知道前一个数的阶乘(n-1)!,然后乘以n即可,因此问题可以转为求上一个数的阶乘,依次向前,直到第一个数。

举个通俗的例子:

A欠你10万,但是他没那么多钱,B欠A 8万,C欠B 7万 C现在有钱。因此你要逐层找到C,一层一层还钱,最后你才能拿到属于你的10万。

到此这篇关于Python自动化测试笔试面试题精选的文章就介绍到这了,更多相关Python自动化测试笔试面试时常见的编程题内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
Python与Java间Socket通信实例代码
Mar 06 Python
Python正则简单实例分析
Mar 21 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
Django2.1.3 中间件使用详解
Nov 26 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
pytorch 如何使用amp进行混合精度训练
May 24 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 #Python
Python之关于类变量的两种赋值区别详解
Mar 12 #Python
浅谈python3 构造函数和析构函数
Mar 12 #Python
Python基于yield遍历多个可迭代对象
Mar 12 #Python
Python通过4种方式实现进程数据通信
Mar 12 #Python
Python多进程编程multiprocessing代码实例
Mar 12 #Python
Python多线程多进程实例对比解析
Mar 12 #Python
You might like
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
Python连接数据库学习之DB-API详解
2017/02/07 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
python读写csv文件实例代码
2019/07/05 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
介绍一下write命令
2012/09/24 面试题
门店业绩提升方案
2014/06/08 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android