Python常见面试题,Python面试常见问题

  Python常见面试题,Python面试常见问题

  序

  随着行业的发展,编程能力已经成为软件测试人员的基本能力。所以笔试和面试经常会出现一些编码问题,主要考虑以下几点。

  基本的编码能力和思维逻辑

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

  基本算法(排序、搜索、递归)和时间复杂度

  除了基本算法,笔试面试还经常考察以下三个思路。

  忧郁的蚂蚁

  递归

  划分

  忧郁的蚂蚁

  忧郁的是Python的映射类型,字典和集合,唯一键值,检索效率高。序列(列表、祖先、字符串)的元素检索时间复杂度为o(n),而字典和集合检索只需要o ()1)。

  因此,忧郁蚂蚁在列表问题上有两个主要功能:

  去重

  优化搜索效率

  例1:清单很重#

  Set)(不分先后)转换),转换后自动排序。为了保持顺序,必须使用用字典构建的fromkeys))方法,利用字典键值的唯一性进行排序。

  不考虑顺序:

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

  结果=列表(集合(L))

  是打印(结果)

  执行结果:

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

  审议顺序:

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

  结果=列表({}。fromkeys(L)。钥匙) )

  是打印(结果)

  执行结果:

  [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)))

  结果=[(item,l.count ) item)集合1中的项目]

  result.sort (key=lambdax : x [1],reverse=True).

  是打印(结果)

  在这里使用忧郁的ant键值是不可复制的。当然,也可以使用python自带的groupby函数。代码如下。

  来自ITER工具进口集团

  l=[ 1,2,3,a ,b ,c ,1,2,a ,b ,3,c ,d ,a ,b ,1]

  L.sort(key=lambdax:str) x) #分组前必须先排序。

  结果=[]

  对于item,group group by(L,key=lambda x: str(x ) x)):

  result.append((item,len ) list (group))

  result.sort (key=lambdax : x [1],reverse=True).

  是打印(结果)

  例3)从海量数据中寻找前K个数据#

  当数据量较小时,可以使用排序切片,但对于数据量较大的情况,必须考虑服务硬件的条件。也就是说要考虑时间效率、内存消耗和数据特性。如果有大量重复数据,可以先用忧郁蚂蚁减少数据量。

  这里用生成器生成1000万个随机整数,最大数是1000。生成随机数的代码如下。

  随机导入

  导入时间

  n=10000 * 1000

  k=1000

  是打印(n)

  定义编号(n):

  forIinrange(n):

  yeldrandom.randint(0,n))))))).

  L=gen_num(n)))

  没有内存限制(set))。

  开始=时间.时间(

  l=列表(设置(l))

  结果=l[-k:]

  结果.反转(

  Print (time.time ()-start())。

  1000w数据全部读入内存,设定后列表自动升序排列。切片中从-1000到最后一个的数字是top 1000。

  使用堆可以节省内存。

  开始=时间.时间(

  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。

  请注意不要使用双回路。请将它与目标的暴力总和进行比较。正确的做法是单循环。然后,找出目标值和当前值之间的差异是否存在于列表中。

  但是因为链表的in查询时间复杂度是o(n),也就是说隐含了一个循环,这个效率其实和double loop是一样的,也就是o) n^2).

  在这里,忧郁蚂蚁可以优化查询差是否在链表中操作,将o(n)降低到o(n),所以整体效率为O) n 2) O (n)。

  l=[ 1,2,3,4,5,6,7,8 ]

  使用set1=set(list1)集合可以方便地进行搜索。

  目标=6

  结果=[]

  对于列表1中的a:

  b=目标- a

  如果b目标和b在集合1中:#在集合中查找。为避免重复,判断A为较小值。

  Result.append((list1.index(b(a,list1.index) b))列表索引的目标运算为o )1)

  是打印(结果)

  递归问题

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

  阶乘

  斐波那契数列

  在楼梯上跳,变态的跳。

  快速排序

  二进位检索

  二叉树深度扫描(前中后顺序))))))))))))。

  求二叉树的深度

  平衡二叉树的判定

  确定这两棵树是否相同。

  递归是一种基于层次推导的解题方法,是一种非常重要的解题思路。可以递归分层,简化问题,考虑导出和每一层的导出。

  比如阶乘,我想求N!只要知道前一个数的阶乘(n-1)就行了!乘以n,这样问题就可以求出前一个数的阶乘,然后依次前进到第一个数。

  举一个常见的例子:

  a欠你10万,但是他没那么多钱。b是8万,C是7万,C现在有钱了。于是,你可以在一楼找到C,在一楼还钱,最后拿到你的10万元。

  至此,我已经介绍了这篇关于Python自动化测试笔试试题选择的文章。Python自动化测试笔试面试常见编程题内容,请搜索聚美学院往期文章或继续查看以下相关文章。希望以后能支持聚米学院。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: