前言

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

基本编码能力及思维逻辑

基本数据结构(顺序表、链表、队列、栈、二叉树)

基本算法(排序、查找、递归)及时间复杂度

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

哈希

递归

分治

哈希

哈希即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自动化测试面试题大全带答案_Python自动化测试笔试面试题精选相关推荐

  1. Java面试题大全带答案 110道(持续更新)

    本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案 如果不背 ...

  2. Java面试题大全带答案110道(持续更新)

    [Java面试题大全带答案 110道(持续更新)] 本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题 ...

  3. Java面试题大全带答案 40道

    本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案 如果不背 ...

  4. Jvm面试题及答案(300道 Jvm面试题大全带答案)

    最新Jvm面试题及答案[附答案解析]Jvm面试题大全带答案,Jvm面试题最新面试题,Jvm面试题新答案已经全部更新完了,有些答案是自己总结的,也有些Jvm面试题答案是在网上搜集整理的.这些答案难免会存 ...

  5. Jvm面试题及答案整理 271道,Jvm面试题大全带答案(2021最新版)

    Jvm面试题及答案整理 271道,Jvm面试题大全带答案(2021最新版) Jvm面试题及答案[最新版]Jvm高级面试题大全(2021版),发现网上很多Jvm面试题及答案整理都没有答案,所以花了很长时 ...

  6. java笔试题大全带答案_java笔试题大全带答案经典11题

    java笔试题大全带答案(经典11题) 1.不通过构造函数也能创建对象吗() A. 是 B. 否 分析:答案:A Java创建对象的几种方式(重要): (1) 用new语句创建对象,这是最常见的创建对 ...

  7. Android面试题及答案整理(2022年最新Android面试题大全带答案)

    Android面试题及答案(2022年最新Android面试题大全带答案),发现网上很多Android面试题整理都没有答案,所以花了很长时间搜集,本套Android面试题大全,Android面试题大汇 ...

  8. Dubbo面试题及答案整理,Dubbo面试题大全带答案(2021最新版)

    本套Dubbo面试题分了6套,都有Dubbo面试题汇总带答案 Dubbo面试题及答案[最新版]Dubbo高级面试题大全(2021版),发现网上很多Dubbo面试题及答案整理都没有答案,所以花了很长时间 ...

  9. Redis面试题及答案(2021年Redis面试题大全带答案)

    最近梳理2021最新 Redis面试题[附答案解析],包含了 Java基础.并发.JVM.数据库.Spring.SpringMVC.Redis.SpringCloud.设计模式.MQ.Linux.Re ...

最新文章

  1. P4113 [HEOI2012]采花 树状数组离线
  2. 同时打开两个excel工作窗口
  3. amp 显示成转义字符 in html,如何在HTML标签中转换转义字符?(How to convert escape characters in HTML tags?)...
  4. 学习、使用Echar
  5. matlab 频率分辨率,功率谱、频率分辨率、频谱泄漏与窗函数
  6. android三指截屏apk,手机也能截长图!360 OS三指截屏详解
  7. 计算机应届生的面试经验
  8. 数据整理—dplyr包(mutate系列)
  9. 《Java语言程序设计与数据结构》编程练习答案(第三章)(三)
  10. 魅族手机投屏电脑如何操作
  11. mysql 分组 列转行,mysql列转行以及年月分组实例
  12. centos8安装失败 Linux dd,在RHEL 8/CentOS 8上安装Telegraf的方法
  13. 好玩的智力测试题-精品
  14. 18uec++多人游戏【服务器为两个角色发枪,并能在线开枪】
  15. 【TypeScript】JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“。ts(7026)
  16. Linux七大项目作业详细步骤
  17. hbase创建solr索引的超时问题
  18. syx278250658
  19. 非root权限安装mysql
  20. CN和CSK运动跟踪算法

热门文章

  1. [ABAP] PBOM历史版本函数展开 CSAP_MAT_BOM_READ
  2. 微信扫码登录自定义二维码样式
  3. Battle Mages (魔法之战,精灵传说)修改器
  4. You have not concluded your merge (MERGE_HEAD exists).
  5. 18篇文章系统解读:中台规划如何撬动企业IT基础设施转型升级
  6. 配置有误:由于权限不足而无法读取配置文件
  7. 自动表单生成工具说明(后端、桌面、web、移动端)
  8. 《匆匆那年》每一集的标题
  9. Minecraft 从入门到入坑(边玩游戏边学编程)
  10. ElasticKibana 安装部署