python经典面试题

 

 

基础部分

1.将列表按照下列规则排序,补全代码
1.整数在前,负数在后
2.正数从小到大
3.负数从大到小
lst = [7,-8,5,4,0,-2,-5]
补全代码:
sorted(lst, key=lambda x:____)
答案: 
lst = [7,-8,5,4,0,-2,-5]
lst = sorted(lst, key=lambda x:(int(x<0), abs(x)))
print(lst)
View Code
解析:
sorted语法:
sorted(iterable[, cmp[, key[, reverse]]])
参数说明:

iterable -- 可迭代对象。
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。


lambda表达式语法:
    python 使用 lambda 来创建匿名函数。

    lambda只是一个表达式,函数体比def简单很多。
    lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
    虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
    语法
    lambda函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression
    如下实例:
 
        # 可写函数说明
        sum = lambda arg1, arg2: arg1 + arg2;
 
        # 调用sum函数
        print "相加后的值为 : ", sum( 10, 20 )
        print "相加后的值为 : ", sum( 20, 20 )

        以上实例输出结果:

        相加后的值为 :  30
        相加后的值为 :  40        
View Code

 

2.将列表内的元素根据位数合并成字典

lst = [1,2,4,8,16,32,64,128,256,512,1024,32769,65536,4294967296]

# 输出

{
1:[1,2,3,8],
2:[16,32,64],
3:[128,256,512],
4:[1024,],
5:[32769,65536],
10:[4294927692]
}
 答案:
# 方法一:
li = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 32769, 65536, 4294967296]
dic = {}
for i in li:
    length = len(str(i))
    dic.setdefault(length, [])
    dic[length].append(i)
print(dic)


# 方法二:
dct2 = {}
[dct2.setdefault(len(str(i)), []).append(i) for i in lst]
print(dct2)
View Code
 
3.请尽量用简洁的方法将二维数组转换成一位数组
# 转换前
lst = [[1,2,3],[4,5,6],[7,8,9]]
# 转换后
[1,2,3,4,5,6,7,8,9]
 答案:
lst = [[1,2,3],[4,5,6],[7,8,9]]
li = [i for j in lst for i in j ]
print(li)
View Code
 
4.哈希冲突回避算法回避有哪几种,分别有什么特点?
答案:
1.开放地址法
2.链地址法
3.公共溢出区法
4.再哈希法
View Code
 
5.简述python的字符串驻留机制
答案:
'''
我们都知道python中的引用计数机制,相同对象引用其实都是内存中的同一个位置,这也叫作"python的字符串驻留机制"
'''
View Code
 
 6.以下代码输出的是什么?
ls = ["a","b","c","d","e"]
print(ls[10:])
 答案:
[]
View Code
 7.如下代码段
import copy
a = [1,2,3,[4,5],6]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)

b.append(10)
c[3].append(11)
d[3].append(12)

print(a,b,c,d)

 

答案:
'''
[1, 2, 3, [4, 5, 11], 6, 10] 
[1, 2, 3, [4, 5, 11], 6, 10]
[1, 2, 3, [4, 5, 11], 6] 
[1, 2, 3, [4, 5, 12], 6]
'''
View Code
 解析:
'''
直接赋值
    对于list,set,dict,来说,直接赋值,其实是把内存地址交给变量,并不是赋值一份内容,所以,lst1的内存指向和lst2是一样的,lst1改变了,lst2也发生了改变

浅拷贝
 浅拷贝,只会拷贝第一层,第二层的内容不会拷贝,所以称为浅拷贝

深拷贝
深度拷贝,把元素内部的元素完全进行拷贝复制,不会产生一个改变另一个跟着改变的问题
'''
View Code
 8.有以下字典按照字典中的value进行排序
dic = {"a":26, "g":20, "e":20, "c":24, "d":23, "f":21, "b":25}
答案:
d = {"a":26, "g":20, "e":20, "c":24, "d":23, "f":21, "b":25}

方法一:

sorted(d.items(),key = lambda x:x[1])
方法二:

import operator
sorted(d.items(),key = operator.itemgetter(1))
View Code
 9.给定两个list A, B,请用python找出,A,B中相同的元素,A,B中不同的元素
答案:见链接https://www.cnblogs.com/baijinshuo/p/10403448.html
 10.下列叙述错误的是
A.栈是线性结构
B.队列是线性结构
C.线性列表是线性结构
D.二叉树是线性结构
 答案:D
11.字典的item()和iteritems的区别是什么
答案:
'''
字典的items方法作用:是可以将字典中的所有项,以列表方式返回。因为字典是无序的,所以用items方法返回字典的所有项,也是没有顺序的。
字典的iteritems方法作用:与items方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器。
'''
View Code
 
12.阅读代码写出结果:
li = [2,4,5,6,7]
for i in li:
    if i % 2 == 0:
        li.remove(i)
print(li)
View Code
答案:
[4,5,7]
View Code

 

13.字典取值的三种方法
答案:
person = {'name':'xiaoming', 'age':18}

# 第一种 若键不存在则会抛出KeyError异常
person['city']
# 第二种 不会抛出异常,不存在则返回None,也可以设置默认返回值
person.get('city',"上海")
# 第三种 与第二种类似,区别在于setdefault方法会更新字典
person.setdefault('city', '上海')
View Code

 

 14.请写一个函数,计算如下几个字母代表的数字

AB-CD=EF

EF-GH=PPP

答案 :

def fun():
    li = [111,222,]
    for AB in range(10,100):
        for CD in range(10,100):
            for GH in range(10,100):
                PPP = AB-CD+GH
                if PPP in li and (AB-CD)>=10:
                    yield [AB,CD,AB-CD,GH,PPP]

for item in fun():
    new_item = map(str,item)
    s = "".join(new_item)
    length = len(s)
    if len(set(s)) == length-2: # 其中A,B,C,D,E,F,G,H,P不能相等,(去重之后的长度如果与原来的长度相等,则A,B,C,D,E,F,G,H,P是不相等的)
        print(item)

 

解析:

AB-CD=EF
EF+GH=PPP
可以换算为:AB-CD+GH=PPP

 

 未完......

posted @ 2019-02-19 20:29  小白°  阅读(359)  评论(0编辑  收藏  举报