Day14.2 面试题、滑动序列
作者:互联网
1.滑动序列面试题
# 作业:可滑动的序列 自定义一个函数 根据参数n的值,变成对应个元素的容器 (zip) """ listvar = [1,2,3,4,5,6,7,8,9] n = 2 listvar = [[1,2],[3,4],[5,6],[7,8]] n = 3 listvar = [[1,2,3],[4,5,6],[7,8,9]] n = 4 listvar = [[1,2,3,4],[5,6,7,8]] """
""" #复习 lst1 = [1,5] lst2 = [2,6] lst3 = [3,7] lst4 = [4,8] it = zip(lst1,lst2,lst3,lst4) print(list(it)) # [(1, 2), (3, 4), (5, 6), (7, 8)] # n = 2 lst1 = [1 , 3 , 5 , 7 ,9] listvar[0::2] # 0 2 4 6 8 lst2 = [2 , 4 , 6 , 8 ] listvar[1::2] it = zip(lst1,lst2) print(list(it)) #listvar = [[1,2,3],[4,5,6],[7,8,9]] n=3 lst1 = [1,4,7] listvar[0::3] # 0 3 6 lst2 = [2,5,8] listvar[1::3] lst3 = [3,6,9] listvar[2::3] it = zip(lst1,lst2,lst3) #listvar = [[1,2,3,4],[5,6,7,8]] lst1 = [1,5,9] listvar[0::4] # 0 4 8 lst2 = [2,6] listvar[1::4] 2 6 lst3 = [3,7] listvar[2::4] lst4 = [4,8] listvar[3::4] it = zip(lst1,lst2,lst3,lst4) range(4) """ # n = 2 # lst1 = [1 , 3 , 5 , 7 ,9] #listvar[0::2] # 0 2 4 6 8 # lst2 = [2 , 4 , 6 , 8 ] #listvar[1::2] # it = zip(lst1,lst2) # print(list(it)) # zip(listvar[0::2],listvar[1::2]) listvar = [1,2,3,4,5,6,7,8,9] n = 2 res = [listvar[i::n] for i in range(n)] print(res) # [[1, 3, 5, 7, 9], [2, 4, 6, 8]] n = 3 res = [listvar[i::n] for i in range(n)] print(res) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]] n = 4 res = [listvar[i::n] for i in range(n)] print(res) # [[1, 5, 9], [2, 6], [3, 7], [4, 8]] # 把大列表当中的每一个小列表一个一个的拿出来当成zip的参数进行赋值 # 过程化版本 n = 5 it = zip(*[listvar[i::n] for i in range(n)]) print(list(it)) # [(1, 2, 3, 4, 5)] # 普通版本 def func(listvar,n): return zip(*[listvar[i::n] for i in range(n)]) res = func(listvar,2) print(list(res)) # [(1, 2), (3, 4), (5, 6), (7, 8)] # 优化版本 func = lambda listvar,n : zip( *[ listvar[i::n] for i in range(n) ] ) it = func(listvar,3) print(list(it)) # [(1, 2, 3), (4, 5, 6), (7, 8, 9)] # 复习 * 和 ** 的魔术用法(是函数的调用处使用) def func(a,b,c): print(a,b,c) # 把列表当中的每一个元素,一个一个拿出来作为func的参数进行赋值; listvar = [1,2,3] func(*listvar) def func(a=1,b=2,c=3): print(a,b,c) # 1 2 3 dic = {'a':10,"b":12,"c":13} func(**dic) # a=10,b=12,c=13 # 10 12 13
# ###2.值是多少
def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
list2 = extendList(123, [])
list3 = extendList('a')
函数如果定义一个默认形参,那么这个值会在内存当中提前保留一份 在函数调用时,如果用户定义了实参,那么使用用户自己的实际值 如果用户没有给与实际参数,那么使用默认形参值
list1 = extendList(10) print(list1) #[10] list2 = extendList(123, []) print(list2) #[123] list3 = extendList('a') print(list3) #[10,a]
# ###3.res多少?
def func():
return [lambda x : i*x for i in range(4)]
res = [m(2) for m in func()]
print(res)
# 在ceshi函数当中 跑循环4遍 ,循环定义4个函数 # 注意的是,遍历的时候仅仅是定义,只有在调用的时,才会运行函数体, # 所以定义时,i变量不会直接走入函数体内参与运算 # # 最后通过lst返回,lst当中包含4个函数,因为内函数func使用了外函数ceshi的变量i, # 所以变量i延长了它的生命周期,这是闭包的特点 # # 返回出来之后,通过列表推导式 , 循环调用了4次函数,这个时候 2 与先前的i 参与运算, # 因为i值已经全部循环结束,最后的i = 3,所以每个函数的运算结果 都是 2*i => 2 * 3 =>6 # 因为循环4次,所以列表里 产生了4 个 6; ''' def ceshi(): lst = [] for i in range(4): def func(x): return i*x lst.append(func) return lst lst = ceshi() print(lst) res = len(lst) #4 ''' # # [ # <function ceshi.<locals>.func at 0x000001805BB50EA0>, # <function ceshi.<locals>.func at 0x000001805BB50F28>, # <function ceshi.<locals>.func at 0x000001805BB50E18>, # <function ceshi.<locals>.func at 0x000001805BB85048> # ] # lst = [函数1,函数2,函数3,函数4]
# 函数的定义处和函数的调用处要分开 # 只有在函数调用的时候,才会执行函数体, # 定义的时候只是单纯的定义包括参数,而没有去调用里面的内容
##4.打印多少?
def add(a,b): #普通求和函数
return a + b
def test(): #生成器函数
for i in range(4):
yield i
g=test()
for n in [2,10]:
g=(add(n,i) for i in g)
print(list(g))
""" 定义一个生成器可以使用两种方式 要么使用生成器表达式,要么使用生成器函数, 注意只有调用时,才能执行生成器里面的内容 , next,for,list都是在调用生成器 而g=(add(n,i) for i in g) 写法是在定义生成器 next(g) for .. in g list(g) 是在调用 在循环时候,只是定义了生成器2次,没有在调用,下次再拿取n的时,n已经等于10 第一次调用生成器 先计算g=(add(n,i) for i in (0,1,2,3)) 得到结果得范围 g = (10,11,12,13) 第二次调用生成器 先计算g=(add(n,i) for i in (10,11,12,13)) 得到结果得范围 g = (20,21,22,23) list进行强转,得到列表[20,21,22,23] """
''' g=(add(n,i) for i in g) # i的范围 0 1 2 3 add(n,0) => add(10,0) => 10 add(n,1) => add(10,1) => 11 add(n,2) => add(10,2) => 12 add(n,3) => add(10,3) => 13 g = (10,11,12,13) g=(add(n,i) for i in g) add(n,10) => add(10,10) => 20 add(n,11) => add(10,11) => 21 add(n,12) => add(10,12) => 22 add(n,13) => add(10,13) => 23 [20,21,22,23]
标签:10,面试题,函数,Day14.2,add,listvar,func,print,滑动 来源: https://www.cnblogs.com/longerandergou/p/10959822.html