1 Python面试题 2 5月27日 3 1、一个列表如何去重复且保证原有顺序不变? 4 (l = [8,6,4,9,4,1,5,4,6,5,1,2,5,22]) 5 Part1: 6 l1 = [8,6,4,9,4,1,5,4,6,5,1,2,5,22] 7 l2 = [] 8 for line in l1: 9 If line not in l2: 10 L2.append(line) 11 Print(l2) 12 Part2: 13 l1 = [8,6,4,9,4,1,5,4,6,5,1,2,5,22] 14 l2 = list(set(l1)) 15 # 用set去重复,再转换回列表(没有得到原来顺序),将上一 16 # 得到的列表排序,按照l1中的顺序排序; 17 l2.sort(key=l1.index) 18 2、按照列表里面的字典内的年龄进行排序? 19 Part1: 20 l3 = [ 21 {‘name’:’k1’,’age’:18},{‘name’:’k1’,’age’:15}, 22 {‘name’:’k1’,’age’:19},{‘name’:’k1’,’age’:28} 23 ] 24 5月28日 25 # 根据字典age的依据传值函数返回年龄排序 26 def emp(x): 27 return x[‘age’] 28 l3.sort(key=emp) 29 30 part2: 31 # 使用lambda表达式 32 # lambda是遍历了l3里面的字典,然后去age的值排序 33 l3.sort(key=lambda k:k[‘age’]) 34 35 5月29日 36 3、求下列打印的结果 37 Part1: 38 def exetend_list(v,li=[]): 39 li.append(v) 40 return li 41 42 list1 = exetend_list(10) 43 44 list2 = exetend_list(123,[]) 45 46 list3 = exetend_list('a') 47 48 # 代码执行的时候从上到下,已经把 10,'a' 加入li列表里面 49 print(list1) #[10,’a’] 50 51 # 把参数123 放进一个新的list列表里面的了 52 print(list2) #[123] 53 54 #与list1一样都是放进同一个li里面 55 print(list3) #[10,’a’] 56 #因为他们都是在同一个列表里面,所以id都一样 57 print(list1 is list3) 58 Part2:心理抗压能力题,做题必须对自己充满自信 59 60 # 以下代码的输出结果是什么?(考你对自己能力是否认可!) 61 62 # 心理抗压能力 63 64 l1 = ['a','b','c','d','f','g'] 65 66 print(l1[10:]) 67 68 Part3:如何打乱一个有序列表 69 li = [11,22,33,44,55] 70 # 导入random模块 71 import random 72 # 利用random模块里面的shuffle方法进行随机排序 73 random.shuffle(li) 74 75 print(li) 76 77 li.sort() 78 79 print(li) 80 81 Part4:直接赋值、拷贝、深度拷贝、切片赋值 82 Test1: 83 list5 = [11, 22, [33, [44, 55]]] 84 85 list6 = list5 86 87 # copy一个列表 88 print(list6) 89 90 list5[2][1][0] = 444 91 92 # 因为是在list5开辟的内存空间中修改[33,[44,55]]所以id不会变 93 print(list6) 94 95 print(id(list6),id(list5)) 96 97 Test2: 98 # 把值':'切分copy到list7一个新的list空间里面 99 list7 = list5[:] 100 101 print(list7) 102 103 list5[2][1][0] = 444 104 105 # 把修改后的然后赋值到新的内存空间里 106 print(list7) 107 108 # 所以list5与list7的内存地址不一样 109 print(id(list7), id(list5)) 110 111 5月30日 112 """ 113 问:执行完下面的代码后, l,m的内容分别是什么? 114 """ 115 116 117 def func(m): 118 for k,v in m.items(): 119 m[k+2] = v+2 120 121 122 m = {1: 2, 3: 4} 123 l = m # 浅拷贝 124 l[9] = 10 125 #func(l) 126 m[7] = 8 127 128 129 print("l:", l) 130 print("m:", m) 131 3.6版本会报错,因为在迭代的过程中不可以修改key和value; 132 2.7不会报错; 133 134 5月31日 135 % 与 format的区别? 136 1. 简单的一个就用%,两个或者多个就用format: 137 2. 举个例子:%一般格式化的都是一个元组 138 像两个或者多个的话会让你增加错误; 139 #敌人坐标 140 c = (255,255) 141 142 # 利用%进行格式化: 143 # print("向她开炮: %s" %c) 144 print("向她开炮: %s" %(c,)) 145 146 # 用format进行字符串的格式化 147 print("向他开炮:{}".format(c)) 148 149 6月1号 150 """ 151 生成如下列表: 152 [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12]] 153 """ 154 part1. 155 list1 = [] 156 for i in range(4): 157 list2 = [] 158 for j in range(5): 159 list2.append(i*j) 160 list1.append(lsit2) 161 print(list1) 162 163 part2. 164 res = [[i*j for j in range(5)] for i in range(4) ] 165 print(res) 166 167 168 6月4号 169 每次调用f的时候,在打印“2018-06-04”之前打印一句 开始,之后打印一句结束; 170 171 from functools import wraps 172 173 def auth(func): 174 @wraps(func) 175 def wrapper(*args,**kwargs): 176 print('start ---kermit很帅') 177 func(*args,**kwargs) 178 print('end ---kermit很帅') 179 return wrapper 180 @auth 181 def f(): 182 ''' 183 注释 184 ''' 185 print('2018-06-04') 186 f() 187 188 189 6月5号 190 """ 191 1. os和sys都是干什么的? 192 2. 你工作中都用过哪些内置模块? 193 3. 有没有用过functools模块? 194 """ 195 # 1. os和sys都是干什么的? 196 # os是系统相关的,sys是与系统交互的; 197 import os 198 base_dir = os.path.abspath(__file__) # 取当前文件的绝对路径 199 base_dir = os.path.dirname(os.path.abspath(__file__)) # 获取当前文件的父目录赴京 200 path = os.path.join(base_dir,'abc') # 在当前父目录下拼接一下abc的文件夹路径 201 path = base_dir + "\\abc" # 不推荐使用硬编码的形式拼接路径 202 203 import sys 204 sys.path.append() # 向当前运行的环境变量中添加一个指定的路径 205 206 if __name__ == '__main__': 207 print(sys.argv) # 获取cmd中的命令,返回来的是一个列表 208 print(sys.argv[1]) 209 print(sys.argv[2]) 210 211 212 # 2. 你工作中都用过哪些内置模块? 213 # re,json,hashlib,time,datetime,socket,thread,functools 214 215 from functools import partial 216 def f(a,b): 217 return a + b 218
面试题