原标题:常见Python面试题—手写代码系列

1.如何反向迭代一个序列

#如果是一个list,最快的方法使用reverse

tempList = [1,2,3,4]

tempList.reverse()

for x in tempList:

print x

#如果不是list,需要手动重排

templist = (1,2,3,4)

for i in range(len(templist)-1,-1,-1):

print templist[i]

2.如何查询和替换一个文本中的字符串

#最简单的方法使用replace()

tempstr = "hello you hello python are you ok"

print tempstr.replace("you","python")

#还可以使用正则,有个sub()

tempstr = "hello you hello python are you ok"

import re

rex = r'(hello|Use)'

print re.sub(rex,"Bye",tempstr)

3.使用python实现单例模式

#方法一:可以使用__new__方法

#在__new__方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls_instance

class SingleTon(object):

def __new__(cls,*args,**kwargs):

if not hasattr(cls,'_instance'):

cls._instance = object.__new__(cls,*args,**kwargs)

return cls._instance

class TestClass(SingleTon):

a = 1

test1 = TestClass()

test2 = TestClass()

print test1.a,test2.a

test1.a=2

print test1.a,test2.a

print id(test1),id(test2)

#方法二:使用装饰器,建立过实例的就放到instances里面,下次建立的时候先检查里面有没有

def SingleTon(cls,*args,**kwargs):

instances = {}

print instances

def _singleton():

if cls not in instances:

instances[cls] = cls(*args,**kwargs)

print instances

return instances[cls]

return _singleton

@SingleTon

class LastClass(object):

a = 1

test1 = LastClass()

print test1.a

test2 = LastClass()

print test2.a

#方法三:使用__metaclass__(元类)关于元类看看这个吧;http://blog.jobbole.com/21351/

class SignalTon(type):

def __init__(cls,name,bases,dict):

super(SignalTon, cls).__init__(name,bases,dict)

cls._instance = None

def __call__(cls, *args, **kwargs):

if cls._instance is None:

cls._instance = super(SignalTon,cls).__call__(*args,**kwargs)

return cls._instance

class TestClass(object):

__metaclass__ = SignalTon

test1 = TestClass()

test2 = TestClass()

test1.a = 2

print test1.a,test2.a

print id(test1),id(test2)

#方法四:共享属性 所谓单例就是所有的引用(实例,对象)拥有相同的属性和方法,同一个类的实例天生都会有相同的方法,那我们只需要保证同一个类所产生的实例都具有相同的属性。所有实例共享属性最简单直接的方法就是共享__dict__属性指向。

class SingleTon(object):

_state = {}

def __new__(cls, *args, **kwargs):

obj = object.__new__(cls,*args,**kwargs)

obj.__dict__ = cls._state

return obj

class TestClass(SingleTon):

a = 1

test1 = TestClass()

test2 = TestClass()

print test1.a,test2.a

test1.a = 2

print test1.a,test2.a

print id(test1),id(test2)

#方法五:使用同一个模版

#写在mysingleton.py中

class My_Singleton(object):

def foo(self):

pass

my_singleton = My_Singleton()

#写在要使用这个实例的py文件里面,在不同的引用的地方都引用相同的实例,以此实现单例模式

from mysingleton import my_singleton

my_singleton.foo()

4.重新实现str.strip()

def rightStrip(tempStr,splitStr):

endindex = tempStr.rfind(splitStr)

while endindex != -1 and endindex == len(tempStr) - 1:

tempStr = tempStr[:endindex]

endindex = tempStr.rfind(splitStr)

return tempStr

def leftStrip(tempStr,splitStr):

startindex = tempStr.find(splitStr)

while startindex == 0:

tempStr = tempStr[startindex+1:]

startindex = tempStr.find(splitStr)

return tempStr

str = " H "

print str

print leftStrip(str,' ')

print rightStrip(str,' ')

#输出

H

H

H

5.super的原理

#阅读下面的代码,它的输出结果是什么?

class A(object):

def __init__(self):

print "enter A"

super(A, self).__init__() # new

print "leave A"

class B(object):

def __init__(self):

print "enter B"

super(B, self).__init__() # new

print "leave B"

class C(A):

def __init__(self):

print "enter C"

super(C, self).__init__()

print "leave C"

class D(A):

def __init__(self):

print "enter D"

super(D, self).__init__()

print "leave D"

class E(B, C):

def __init__(self):

print "enter E"

super(E, self).__init__() # change

print "leave E"

class F(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.闭包

常用的装饰器就是闭包的一种

def make_adder(addend):

def adder(addend):

return addend+addend

return adder

P1 = make_adder(5)

P2= make_adder(4)

print p1(10)

#输出15

print p2(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"))

print alist

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']

def merge_list(*args):

s = set()

for i in args:

s = s.union(i)

print(s)

return s

merge_list(alist,blist)

9.打乱一个排好序的列表

from random import shuffle

alist = range(10)

print(alist)

shuffle(alist)

print(alist)

10.简单的实现一个栈结构 stack

class Stack(object):

def __init__(self):

self.value = []

def push(self,x):

self.value.append(x)

def pop(self):

self.value.pop()

stack = Stack()

stack.push(1)

stack.push(2)

stack.push(3)

print(stack.value)

stack.pop()

print(stack.value)

11.输入一个日期,返回时一年中的哪一天

from datetime import datetime

def which_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}

def string_to_dict(string):

d = {}

for kv in string.split("|"):

k,v = kv.split(":")

if v.isdigit():

v=int(v)

d[k]=v

return d

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]]

def get_num(num,data=None):

while data:

if num > data[0][-1]:

del data[0]

elif num

data = list(zip(*data))

del data[-1]

data = list(zip(*data))

else:

return True

data.clear()

return False

print (get_num(18,arr))

不处理数组矩阵

使用 step-wise 线性搜索

def getvalue(data,value):

m = len(data)-1

n = len(data[0])-1

r = 0

c = n

while c>=0 and r<=m:

if value == data[r][c]:

return True

elif value>data[r][c]:

r = r+1

else:

c = c-1

return False

14.获取最大公约数(欧几里得算法)

a= 25

b=15

def max_common(a,b):

while b:

a,b=b,a%b

return a

详解:

https://blog.csdn.net/franktan2010/article/details/38229641

15.求两个数的最小公倍数(公式法)

两个数的乘积等于这两个数的 最大公约数与最小公倍数的积

a=25

b=15

def min_common(a,b):

c= a*b

while b:

a,b=b,a%b

return c//a

详情:

https://zhidao.baidu.com/question/90232880

16.获取中位数

如果总数个数是奇数,按从小到大的顺序,取中间的那个数;如果总数个数是偶数个的话,按从小到大的顺序,取中间那两个数的平均数。

#计算中位数

def mediannum(num):

listnum = [num[i] for i in range(len(num))]

listnum.sort()

lnum = len(num)

if lnum % 2 == 1:

i = int((lnum + 1) / 2)-1

return listnum[i]

else:

i = int(lnum / 2)-1

return (listnum[i] + listnum[i + 1]) / 2

详情:

https://blog.csdn.net/qq_33363973/article/details/78773144

def medin(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))

来源网络,侵权联系删除返回搜狐,查看更多

责任编辑:

python手写代码面试_常见Python面试题—手写代码系列相关推荐

  1. python手写代码面试_常见Python面试题 — 手写代码系列

    原标题:常见Python面试题 - 手写代码系列 作者: Peace & Love 来自:https://blog.csdn.net/u013205877/article/details/77 ...

  2. python面试代码题_常见python面试题-手写代码系列

    原博文 2019-08-13 13:50 − 1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reversetempList = [1,2,3,4]tempList.reverse()f ...

  3. 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发

    微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  4. Web前端人员如何面试?常见vue面试题有哪些?

    Web前端人员如何面试?常见vue面试题有哪些?vue是一套用于构建用户界面的渐进式JavaScript框架,也是初创项目的首选前端框架.很多企业在招聘前端工程师时都会考察其对vue的了解,接下来小编 ...

  5. python扫雷游戏实验分析_用python写扫雷游戏实例代码分享

    扫雷是一个非常经典的WIN游戏,我们教给大家用python语言来写出这个游戏,以下是全部实例代码: #!/usr/bin/python #coding:utf-8 #python 写的扫雷游戏 imp ...

  6. python外星人入侵不显示子弹_【Python】python外星人入侵,武装飞船,代码写好后,不显示子弹...

    按照书上写的武装飞船,写到能够左右移动了,但到了射击(装子弹)时候,按照书上的代码照搬了,运行时没显示代码有问题,但就是按了空格键,不见有子弹,其他都正常. 代码: alien_invasion.py ...

  7. 抖音是用python写的吗_用 Python 实现抖音尬舞机

    原标题:用 Python 实现抖音尬舞机 如今说到体感游戏,大家一定都不陌生,比如微软的 Kinect.任天堂的 Switch,都曾是游戏业的革命性产品.而另一款网红产品-抖音,也在去年底上线过一个& ...

  8. python解释器种类及特点_【Python面试】 说说Python解释器种类以及特点?

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...

  9. python写硬件驱动_用Python驱动开源硬件|课程开发者的对话

    随着中小学创客教育的推进,开源硬件逐步被教育工作者所了解并进入了中小学课堂.从一开始的小规模应用到区域级别的大规模推广,开源硬件因为其价格低廉.性能强大和资源丰富,加上扩展性好,越来越得到教师们的认可 ...

最新文章

  1. MongDB与Spring整合及操作
  2. pytorch模型参数信息 计算模型的FLOPs
  3. QT 在定义新的类型时候,注意了(定义了ReadXml),在实现的时候加上Qlabel
  4. jquery获取当前的节点
  5. 开关量光端机产品特点及应用范围介绍
  6. SpringMVC视图解析器
  7. 文献阅读:知识图谱数据管理研究综述
  8. 判断玫瑰花数c语言程序设计教程课后答案,编写程序判断某个四位整数是否为玫瑰花数(用自定义函数)...
  9. BeautifulSoup 用法总结
  10. [Unity][NodeCanvas] 点击场景中的游戏对象以观察行为树运行情况
  11. WPFのDecorator 、Adorner和AdornerDecorator
  12. C#4.0 可选参数和命名参数
  13. 2013应届毕业生“百度”校招应聘总结
  14. 蓝桥杯 ADV-202算法提高 最长公共子序列(动态规划)
  15. 源代码 oa办公系统jsp_【程序源代码】经典的办公系统开发框架
  16. RTP、RTCP及媒体流同步
  17. 使用VC开发的一个简单工作日志软件
  18. 莫斯密码加密与解密--python加密篇
  19. 二叉查找树与平衡二叉树
  20. BugKu Web题《网站被黑》writeUp

热门文章

  1. 人生中一定要坚守的格言
  2. 408业务课·计算机网络——【考研随笔】之一
  3. ZZULIOJ 1064:加密字符
  4. 求给定精度的简单交错序列部分和(c语言)
  5. docker run命令_CVE-2019-14271:Docker cp命令漏洞分析
  6. 数1的个数(信息学奥赛一本通-T1095)
  7. 信息学奥赛C++语言:打擂台
  8. 50 MM配置-库存管理和实际库存-自动建立库存地点
  9. 4.6.3 内表数据处理
  10. c++基础语句代码(循环语句)