最常见的Python面试题!往往也是企业问到的!高薪资从面试开始!

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

#如果是一个list,最快的方法使用reverse
tempList = [1,2,3,4]
tempList.reverse()
for x in tempList:
 print x
#如果不是list,需要手动重排
templist = (1,4)
for i in range(len(templist)-1,-1,-1):
 print templist[i]

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

进群:548377875   即可获取数十套PDF哦!

#最简单的方法使用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实现单例模式

最常见的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,**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,**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,dict)
 cls._instance = None
 def __call__(cls,**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,id(test2)
#方法四:共享属性 所谓单例就是所有的引用(实例,对象)拥有相同的属性和方法,同一个类的实例天生都会有相同的方法,那我们只需要保证同一个类所产生的实例都具有相同的属性。所有实例共享属性最简单直接的方法就是共享__dict__属性指向。
class SingleTon(object):
 _state = {}
 def __new__(cls,**kwargs):
 obj = object.__new__(cls,**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,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’,’f’]并且元素不能重复
alist = ['a','b','c','d','e','f']
blist = ['x','y','z','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,day)-datetime(year,1,1)).days+1
print(which_day(2017,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

不处理数组矩阵

使用 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,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,53,46,42,82]
print (median(l))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1. 上下文管理器 一个类只要实现了&#160;__enter__()&#160;和&#160;__exit__()&#160;这个两个方法,通过该类创建的对象我们就称之为上下文管理器。 上下文管理器
实验报告一一、作业:建议用时15分钟二、环境:Pycharm -Python3.6三、知识点:python的循环语句(for循环和while循环)四、分析:看到这个乘法口诀表,我们会发现按行来看,是1
项目意义 如果你想在支付宝蚂蚁森林收集很多能量种树,为环境绿化出一份力量,又或者是想每天称霸微信运动排行榜装逼,却不想出门走路,那么该python脚本可以帮你实现。 实现方法 手机安装第三方软件乐心健
发邮件是一种很常见的操作,本篇主要介绍一下如何用python实现自动发件。 import smtplib from email.mime.text import MIMEText from email
我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈是电脑运行代码所需要的时间。这里将介绍四种常用的测试代码运行速度的方法。第一种:使用time模块
前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码。我拍腿正坐,一个想法油然而生:“生活已然很无聊,不如再无聊些叭”。于是,我决定开一个
一、shopping思路 打印商品内容 引导用户选择商品 验证输入是否合法 将用户选择商品通过choice取出来 如果钱够,用本金saving减去该商品价格 将该商品加入购物车 循环遍历购物车里的商品
废话少说,直接上图: 理论: 对图片灰度值以及字符的灰度值都做histogram,并进行主要部分的对应,可以改善对比度和显示效果 经过我在网上拼拼凑凑,以及自己稍微改改得到的代码如下: PIL库: 只
解释继承 一个类继承自另一个类,也可以说是一个孩子类/派生类/子类,继承自父类/基类/超类,同时获取所有的类成员(属性和方法)。 继承使我们可以重用代码,并且还可以更方便地创建和维护代码。Python
小整数缓存池 a = 1 b = 1 print(a is b) # True 短字符串 # True a = &quot;good&quot; b = &quot;good&quot; print(
Python属于解释型语言,当程序运行时,是一行一行的解释,并运行,所以调式代码很方便,开发效率高,还有龟叔给Python定位是任其自由发展、优雅、明确、简单,所以在每个领域都有建树,所有它有着非常强
# is 比较的是内存地址 == 比较内容和数据类型 a = [1, 2, 3] b = a print(a is b) print(a == b) c = copy.deepcopy(a) prin
1、十进制 与 二进制之间的转换 (1)、十进制转换为二进制,分为整数部分和小数部分 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数。
单例 类方法方式 class Single(): def __init__(self, name): self.name = name @classmethod def instance(cls, *
在运行时动态修改类和模块 Hi, monkey 本文首发于Python黑洞网,博客园同步跟新
列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25] def f(x): return x**2 res = ma
简述with方法打开处理文件帮我我们做了什么? 打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open 写法,我们需要try,except,finally,做异常判断,并且文件最终
一行代码实现1—100之和 print(sum(range(1,101))) 程序运行结果: 5050python2和python3的range(100)的区别 python2中的range返回的是一
首先我们来看解封装: &gt;&gt;&gt; mytuple=3,4,5 &gt;&gt;&gt; mytuple (3, 4, 5) 这将 3,4,5 封装到元组 mytuple 中。 现在我们将
简述面向对象中__new__和__init__区别 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候。例如: