第四弹来了,Python高频面试题总结!
一. 将字符串 “k:1 |k1:2|k2:3|k3:4”,处理成字典 {k:1,k1:2,
str1="k:1|k1:2|k2:3|k3:4"
defstr2dict(str1):
dict1={}
foritermsinstr1.split('|'):
key,value=iterms.split(':')
dict1[key]=value
returndict1
#字典推导式
d={k:int(v)fortinstr1.split("|")fork,vin(t.split(":"),)}
二. 请按alist中元素的age由大到小排序
alist=[{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
defsort_by_age(list1):
returnsorted(alist,key=lambdax:x['age'],reverse=True)
三. 下面代码的输出结果将是什么?
list=['a','b','c','d','e']
print(list[10:])
代码将输出[],不会产生IndexError错误,就像所期望的那样,尝试用超出成员的个数的index来获取某个列表的成员。例如,尝试获取list[10]和之后的成员,会导致IndexError。然而,尝试获取列表的切片,开始的index超过了成员个数不会产生IndexError,而是仅仅返回一个空列表。这成为特别让人恶心的疑难杂症,因为运行的时候没有错误产生,导致Bug很难被追踪到。
四. 写一个列表生成式,产生一个公差为11的等差数列
print([x*11forxinrange(10)])
五. 给定两个列表,怎么找出他们相同的元素和不同的元素?
list1=[1,2,3]
list2=[3,4,5]
set1=set(list1)
set2=set(list2)
print(set1&set2)
print(set1^set2)
六. 请写出一段python代码实现删除list里面的重复元素?
l1=['b','c','d','c','a','a']
l2=list(set(l1))
print(l2)
用list类的sort方法:
l1=['b','c','d','c','a','a']
l2=list(set(l1))
l2.sort(key=l1.index)
print(l2)
也可以这样写:
l1=['b','c','d','c','a','a']
l2=sorted(set(l1),key=l1.index)
print(l2)
也可以用遍历:
l1=['b','c','d','c','a','a']
l2=[]
foriinl1:
ifnotiinl2:
l2.append(i)
print(l2)
七. 给定两个list A,B ,请用找出A,B中相同与不同的元素
A,B中相同元素:print(set(A)&set(B))
A,B中不同元素:print(set(A)^set(B))
八. python新式类和经典类的区别?
a. 在python里凡是继承了object的类,都是新式类
b. Python3里只有新式类
c. Python2里面继承object的是新式类,没有写父类的是经典类
d. 经典类目前在Python里基本没有应用
九. python中内置的数据结构有几种?
a. 整型 int、 长整型 long、浮点型 float、 复数 complex
b. 字符串 str、 列表 list、 元祖 tuple
c. 字典 dict 、 集合 set
d. Python3 中没有 long,只有无限精度的 int
十. python如何实现单例模式?请写出两种实现方式?
第一种方法:使用装饰器
defsingleton(cls):
instances={}
defwrapper(*args,**kwargs):
ifclsnotininstances:
instances[cls]=cls(*args,**kwargs)
returninstances[cls]
returnwrapper
@singleton
classFoo(object):
pass
foo1=Foo()
foo2=Foo()
print(foo1isfoo2)#True
第二种方法:使用基类
New 是真正创建实例对象的方法,所以重写基类的new 方法,以此保证创建对象的时候只生成一个实例
classSingleton(object):
def__new__(cls,*args,**kwargs):
ifnothasattr(cls,'_instance'):
cls._instance=super(Singleton,cls).__new__(cls,*args,**kwargs)
returncls._instance
classFoo(Singleton):
pass
foo1=Foo()
foo2=Foo()
print(foo1isfoo2)#True
第三种方法:元类,元类是用于创建类对象的类,类对象创建实例对象时一定要调用call方法,因此在调用call时候保证始终只创建一个实例即可,type是python的元类
classSingleton(type):
def__call__(cls,*args,**kwargs):
ifnothasattr(cls,'_instance'):
cls._instance=super(Singleton,cls).__call__(*args,**kwargs)
returncls._instance
#Python2
classFoo(object):
__metaclass__=Singleton
#Python3
classFoo(metaclass=Singleton):
pass
foo1=Foo()
foo2=Foo()
print(foo1isfoo2)#True
更多的Python面试题目总结也会持续为大家更新!