面试题(一)
生成器(一):面试题
def add(a,b): #这里是一个求和函数 a+b return a+b def test(): #这是一个生成器函数 0-3 for r_i in range(4): yield r_i g= test() #生成器g for n in [2,10]: g = (add(n,i) for i in g) print(list(g))
"""
n = 2
g = (add(n,i) for i in g) 这里只是记录一下代码 其实这也是一个生成器
并没有往外拿值 相当于 g1 = (add(n,i) for i in g)
n = 10
g = (add(n,i) for i in g1) 这里相当于把g变成g1代入
最后 g = (add(n,i) for i in (add(n,i) for i in g))
最后 g = (add(10,i) for i in (add(10,i) 0,1,2,3))
最后list(g) 才开始带入值 n =10 for i in g 0-3
最后往里边放值就对了
"""
生成器(二)面试题
def func(): #生成器函数 yield 222 g = func() g1 =(i for i in g) #生成器表达式 g2 = (i for i in g1) print(list(g)) [222] print(list(g2)) [] print(list(g3)) []
冒泡排序: 相邻两个元素比较,小的往上升,大的往下沉
l = [4,3,2,1] for i in range(1,len(l): for j in range(n-i): if l[j] > l[j+1]: l[j],l[j+1] = l[j+1],l[j] print(l)
#冒泡排序 小的向上升 重的向下沉
#相邻的两个元素做比较 01 12 23
l=[4,3,2,1]
##1st
## 3,4,2,1
## 3,2,4,1
## 3,2,1,4 4
##2nd
## 2,3,1,4
## 2,1,3,4 4
##3rd
## 1,2,3,4 4
#循环的次数和列表中元素的个数有关,列表的长度有关,len(l)
#小轮的次数+大轮的轮次=len(l)
选择排序: 用相同下标的元素,跟其他下标元素作比较
for i in range(n-1): for j in range(i+1,n): if l[i] > l[j]: l[j],l[i] = l[i],l[j] print(l)
#用相同下标的元素,和其它下标的元素进行比较
l=[4,3,2,1]
##1st#下标为0的元素和其它元素进行比较
## 3,4,2,1
## 2,4,3,1 n-1-i
## 1,4,3,2 4-1-0
## #最小的放在了最前面,下标为1的元素,和其它元素进行比较
##2nd
## 1,3,4,2
## 1,2,4,3 4-1-1
##3rd #下标为2的元素,和下标为3的元素比较
## 1,2,3,4 4-1-2
3.深浅拷贝
import copy
浅拷贝: l[:](切片方式) l.copy()
深拷贝 l.deepcopy.copy()
对于不可变数据类型元素,比如int,str,无论深浅拷贝,其内存地址都不会发生变化
浅拷贝: 只是对第一层的拷贝,外围地址发生变化.
深拷贝: 有几层拷贝几层 ,外围地址也变化
4. python 2 range xrange python2 中 range返回列表 xrange是个生成器
python3 中range 和python2 xrange中一样 都是生成器
5.lamdad可能的函数题:
suiyi = lambda x, y : 1, 2 # 笔试题 print(suiyi) print(suiyi(250,38))
#(<function <lambda> at 0x000001E8E1D59158>, 2)
#TypeError: 'tuple' object is not callable
说白了suiyi是一个元组,(lamdad x,y :1 ,2)

浙公网安备 33010602011771号