python手写代码面试_常见Python面试题 — 手写代码系列
原标题:常见Python面试题 — 手写代码系列
作者: Peace & Love
来自:https://blog.csdn.net/u013205877/article/details/77542837
1.如何反向迭代一个序列#如果是一个list,最快的方法使用reverse
tempList = [ 1, 2, 3, 4]
tempList.reverse()
forx intempList:
printx
#如果不是list,需要手动重排
templist = ( 1, 2, 3, 4)
fori inrange(len(templist) -1, -1, -1):
printtemplist[i]
2.如何查询和替换一个文本中的字符串#最简单的方法使用replace()
tempstr = "hello you hello python are you ok"
printtempstr.replace( "you", "python")
#还可以使用正则,有个sub()
tempstr = "hello you hello python are you ok"
importre
rex = r'(hello|Use)'
printre.sub(rex, "Bye",tempstr)
3.使用python实现单例模式#方法一:可以使用__new__方法
#在__new__方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls_instance
classSingleTon(object):
def__new__(cls,*args,**kwargs):
ifnothasattr(cls, '_instance'):
cls._instance = object.__new__(cls,*args,**kwargs)
returncls._instance
classTestClass(SingleTon):
a = 1
test1 = TestClass()
test2 = TestClass()
printtest1.a,test2.a
test1.a= 2
printtest1.a,test2.a
printid(test1),id(test2)
#方法二:使用装饰器,建立过实例的就放到instances里面,下次建立的时候先检查里面有没有
defSingleTon(cls,*args,**kwargs):
instances = {}
printinstances
def_singleton():
ifcls notininstances:
instances[cls] = cls(*args,**kwargs)
printinstances
returninstances[cls]
return_singleton
@SingleTon
classLastClass(object):
a = 1
test1 = LastClass()
printtest1.a
test2 = LastClass()
printtest2.a
#方法三:使用__metaclass__(元类)关于元类看看这个吧;http://blog.jobbole.com/21351/
classSignalTon(type):
def__init__(cls,name,bases,dict):
super(SignalTon, cls).__init__(name,bases,dict)
cls._instance = None
def__call__(cls, *args, **kwargs):
ifcls._instance isNone:
cls._instance = super(SignalTon,cls).__call__(*args,**kwargs)
returncls._instance
classTestClass(object):
__metaclass__ = SignalTon
test1 = TestClass()
test2 = TestClass()
test1.a = 2
printtest1.a,test2.a
printid(test1),id(test2)
#方法四:共享属性 所谓单例就是所有的引用(实例,对象)拥有相同的属性和方法,同一个类的实例天生都会有相同的方法,那我们只需要保证同一个类所产生的实例都具有相同的属性。所有实例共享属性最简单直接的方法就是共享__dict__属性指向。
classSingleTon(object):
_state = {}
def__new__(cls, *args, **kwargs):
obj = object.__new__(cls,*args,**kwargs)
obj.__dict__ = cls._state
returnobj
classTestClass(SingleTon):
a = 1
test1 = TestClass()
test2 = TestClass()
printtest1.a,test2.a
test1.a = 2
printtest1.a,test2.a
printid(test1),id(test2)
#方法五:使用同一个模版
#写在mysingleton.py中
classMy_Singleton(object):
deffoo(self):
pass
my_singleton = My_Singleton()
#写在要使用这个实例的py文件里面,在不同的引用的地方都引用相同的实例,以此实现单例模式
frommysingleton importmy_singleton
my_singleton.foo()
4.重新实现str.strip()defrightStrip(tempStr,splitStr):
endindex = tempStr.rfind(splitStr)
whileendindex != -1andendindex == len(tempStr) - 1:
tempStr = tempStr[:endindex]
endindex = tempStr.rfind(splitStr)
returntempStr
defleftStrip(tempStr,splitStr):
startindex = tempStr.find(splitStr)
whilestartindex == 0:
tempStr = tempStr[startindex+ 1:]
startindex = tempStr.find(splitStr)
returntempStr
str = " H "
printstr
printleftStrip(str, ' ')
printrightStrip(str, ' ')
#输出
H
H
H
5.super的原理#阅读下面的代码,它的输出结果是什么?
classA(object):
def__init__(self):
print"enter A"
super(A, self).__init__() # new
print"leave A"
classB(object):
def__init__(self):
print"enter B"
super(B, self).__init__() # new
print"leave B"
classC(A):
def__init__(self):
print"enter C"
super(C, self).__init__()
print"leave C"
classD(A):
def__init__(self):
print"enter D"
super(D, self).__init__()
print"leave D"
classE(B, C):
def__init__(self):
print"enter E"
super(E, self).__init__() # change
print"leave E"
classF(E, D):
def__init__(self):
print"enter F"
super(F, self).__init__() # change
print"leave F"
#输出
enter F
enter E
enter B
enter C
enter D
enter A
leave A
leave D
leave C
leave B
leave E
leave F
非常棒的讲解:
http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html
6.闭包
常用的装饰器就是闭包的一种
defmake_adder(addend):
defadder(addend):
returnaddend+addend
returnadder
P1 = make_adder( 5)
P2= make_adder( 4)
printp1( 10)
#输出15
printp2( 10)
#输出14
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外
http://www.cnblogs.com/ma6174/archive/2013/04/15/3022548.html
https://foofish.net/python-closure.html
7.给列表中的字典排序
list 对象 alist [{“name”:”a”,”age”:20},{“name”:”b”,”age”:30},{“name”:”c”,”age”:25}]按照 age 从大到小排序
alist = [{ "name": "a", "age": 20},{ "name": "b", "age": 30},{ "name": "c", "age": 25}]
alist.sort(key= lambda:x:-x.get( "age"))
printalist
8.合并两个列表排除重复元素
用简洁的方法合并alist = [‘a’,’b’,’c’,’d’,’e’,’f’]
blist = [‘x’,’y’,’z’,’e’,’f’]并且元素不能重复
alist = [ 'a', 'b', 'c', 'd', 'e', 'f']
blist = [ 'x', 'y', 'z', 'e', 'f']
defmerge_list(*args):
s = set()
fori inargs:
s = s.union(i)
print(s)
returns
merge_list(alist,blist)
9.打乱一个排好序的列表fromrandom importshuffle
alist = range( 10)
print(alist)
shuffle(alist)
print(alist)
10.简单的实现一个栈结构 stackclassStack(object):
def__init__(self):
self.value = []
defpush(self,x):
self.value.append(x)
defpop(self):
self.value.pop()
stack = Stack()
stack.push( 1)
stack.push( 2)
stack.push( 3)
print(stack.value)
stack.pop()
print(stack.value)
11.输入一个日期,返回时一年中的哪一天fromdatetime importdatetime
defwhich_day(year,month,day):
return(datetime(year,month,day)-datetime(year, 1, 1)).days+ 1
print(which_day( 2017, 1, 15))
###12.把字符串”k1:1|k2:2|k3:3”处理成 python 字典的形式:{k1:1,k2:2,k3:3}
defstring_to_dict(string):
d = {}
forkv instring.split( "|"):
k,v = kv.split( ":")
ifv.isdigit():
v=int(v)
d[k]=v
returnd
print(string_to_dict( "k1:1|k2:2|k3:3"))
13.判断输入的值是否在矩阵之中(杨氏矩阵)
在一个二维数组之中,每一行都按照从走到右递增的顺序排序,每一列到按照从上到下的顺序排序.请完成一个函数,输入这样的一个二维手术和一个整数,判断数组中是否含有该整数
#处理数组矩阵
arr = [[ 1, 4, 7, 10, 15],[ 2, 5, 8, 12, 19],[ 3, 6, 9, 16, 22],[ 10, 13, 14, 17, 24],[ 18, 21, 23, 26, 30]]
defget_num(num,data=None):
whiledata:
ifnum > data[ 0][ -1]:
deldata[ 0]
elifnum
data = list(zip(*data))
deldata[ -1]
data = list(zip(*data))
else:
returnTrue
data.clear()
returnFalse
print(get_num( 18,arr))
不处理数组矩阵
使用 step-wise 线性搜索
defgetvalue(data,value):
m = len(data) -1
n = len(data[ 0]) -1
r = 0
c = n
whilec>= 0andr<=m:
ifvalue == data[r][c]:
returnTrue
elifvalue>data[r][c]:
r = r+ 1
else:
c = c -1
returnFalse
14.获取最大公约数(欧几里得算法)a= 25
b= 15
defmax_common(a,b):
whileb:
a,b=b,a%b
returna
详解:
https://blog.csdn.net/franktan2010/article/details/38229641
15.求两个数的最小公倍数(公式法)
两个数的乘积等于这两个数的 最大公约数与最小公倍数的积
a= 25
b= 15
defmin_common(a,b):
c= a*b
whileb:
a,b=b,a%b
returnc//a
详情:
https://zhidao.baidu.com/question/90232880
16.获取中位数
如果总数个数是奇数,按从小到大的顺序,取中间的那个数;如果总数个数是偶数个的话,按从小到大的顺序,取中间那两个数的平均数。
#计算中位数
defmediannum(num):
listnum = [num[i] fori inrange(len(num))]
listnum.sort()
lnum = len(num)
iflnum % 2== 1:
i = int((lnum + 1) / 2) -1
returnlistnum[i]
else:
i = int(lnum / 2) -1
return(listnum[i] + listnum[i + 1]) / 2
详情:
https://blog.csdn.net/qq_33363973/article/details/78773144
defmedin(data):
data.sort()
half = len(data)// 2
return(data[half]+data[~half])/ 2
l = [ 1, 3, 4, 53, 2, 46, 8, 42, 82]
print(median(l))
(完)
●编号510,输入编号直达本文返回搜狐,查看更多
责任编辑:
python手写代码面试_常见Python面试题 — 手写代码系列相关推荐
- python手写代码面试_常见Python面试题—手写代码系列
原标题:常见Python面试题-手写代码系列 1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reverse tempList = [1,2,3,4] tempList.reverse( ...
- python面试代码题_常见python面试题-手写代码系列
原博文 2019-08-13 13:50 − 1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reversetempList = [1,2,3,4]tempList.reverse()f ...
- 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发
微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...
- Web前端人员如何面试?常见vue面试题有哪些?
Web前端人员如何面试?常见vue面试题有哪些?vue是一套用于构建用户界面的渐进式JavaScript框架,也是初创项目的首选前端框架.很多企业在招聘前端工程师时都会考察其对vue的了解,接下来小编 ...
- python扫雷游戏实验分析_用python写扫雷游戏实例代码分享
扫雷是一个非常经典的WIN游戏,我们教给大家用python语言来写出这个游戏,以下是全部实例代码: #!/usr/bin/python #coding:utf-8 #python 写的扫雷游戏 imp ...
- python外星人入侵不显示子弹_【Python】python外星人入侵,武装飞船,代码写好后,不显示子弹...
按照书上写的武装飞船,写到能够左右移动了,但到了射击(装子弹)时候,按照书上的代码照搬了,运行时没显示代码有问题,但就是按了空格键,不见有子弹,其他都正常. 代码: alien_invasion.py ...
- 抖音是用python写的吗_用 Python 实现抖音尬舞机
原标题:用 Python 实现抖音尬舞机 如今说到体感游戏,大家一定都不陌生,比如微软的 Kinect.任天堂的 Switch,都曾是游戏业的革命性产品.而另一款网红产品-抖音,也在去年底上线过一个& ...
- python解释器种类及特点_【Python面试】 说说Python解释器种类以及特点?
最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...
- python写硬件驱动_用Python驱动开源硬件|课程开发者的对话
随着中小学创客教育的推进,开源硬件逐步被教育工作者所了解并进入了中小学课堂.从一开始的小规模应用到区域级别的大规模推广,开源硬件因为其价格低廉.性能强大和资源丰富,加上扩展性好,越来越得到教师们的认可 ...
最新文章
- 牛!这位斯坦福PhD新生的论文被引数:接近4万
- 【Java Web开发指南】深入浅出Spring和SpringMVC
- SpringBoot+MyBatisPlus+Swagger2.7规范开发接口流程(以废料包材入库与出库为例)
- NYOJ15-括号匹配(二)-区间DP
- (原創) 如何在Ubuntu設定P7010的1280 x 768解析度? (OS) (Linux) (Ubuntu) (NB) (P7010)
- java 复制对象_Java程序员必备:序列化全方位解析
- 自动化日志收集及分析在支付宝 App 内的演进
- Spring Cloud连载(2)搭建开发环境
- 中文HanLp分词入门
- nbu备份oracle中途停止,NBU异构还原Oracle完整备份的一些总结
- Windows 下利用cWrsync同步
- jquery清除selected/checked和选中selected/checked
- 微信小程序自定义省市区下拉框
- 试用具体例子说明为什么在运输连接建立时要使用三次握手。说明如不这样做可能会出现什么情况。
- 全球及中国汽车扬声器粘合剂行业市场发展状况与竞争格局分析报告2022-2028年
- [初学Verilog笔记]使用assign还是always
- Barcode Reader SDK5.xCrack,条形码识别支持多种文档和图像格式
- 申报高新技术企业认定哪些地方需要注意?
- 机器学习算法[9]--集成方法之XGBoost原理详解及XGBoost库实现
- “动感”新春:香港高铁首次加入春运 车票抢手