1 # ###1.滑动序列 2 # 作业:可滑动的序列 自定义一个函数 根据参数n的值,变成对应个元素的容器 (zip) 3 """ 4 listvar = [1,2,3,4,5,6,7,8,9] 5 n = 2 6 listvar = [[1,2],[3,4],[5,6],[7,8]] 7 n = 3 8 listvar = [[1,2,3],[4,5,6],[7,8,9]] 9 n = 4 10 listvar = [[1,2,3,4],[5,6,7,8]] 11 """ 12 listvar = [1, 2, 3, 4, 5, 6, 7, 8, 9] 13 '''
1 """ 2 n => 2 3 list1 = [1,3,5,7,9] 4 list2 = [2,4,6,8] 5 it = zip(list1,list2) 6 list1 = listvar[0::2] 7 list2 = listvar[1::2] 8 print(list(it)) 9 10 n => 3 11 list1 = [1,4,7] 12 list2 = [2,5,8] 13 list3 = [3,6,9] 14 it = zip(list1,list2,list3) 15 list1 = listvar[0::3] 16 list2 = listvar[1::3] 17 list3 = listvar[2::3] 18 print(list(it)) 19 20 n => 4 21 list1 = [1,5,9] 22 list2 = [2,6] 23 list3 = [3,7] 24 list4 = [4,8] 25 it = zip(list1,list2,list3,list4) 26 list1 = listvar[0::4] 27 list2 = listvar[1::4] 28 list3 = listvar[2::4] 29 list4 = listvar[3::4] 30 print(list(it)) 31 """
大概过程
1 # n = 2 2 # [1, 3, 5, 7, 9] [2, 4, 6, 8] 3 ''' 4 li = [] 5 for i in range(n): 6 li.append(listvar[i::n]) 7 ''' 8 n = 2 9 li = [] 10 # 产出n个列表, n为用户输入 11 for i in range(n): 12 # 每次循环i都会加一, 就是下个列表的起始值 13 # n为步长, 最后可以获得n个列表, 然后传入zip组合 14 15 res = listvar[i::n] 16 # 将n个列表加入到一个列表中 17 li.append(res) 18 19 print(li) 20 21 # 将这个列表传入到zip, 使用*解包操作 22 res = zip(*li) 23 print(list(res))
使用函数封装
1 def func(n): 2 li = [] 3 for i in range(n): 4 li.append(listvar[i::n]) 5 6 # 放入zip中, 使用*解包 7 return zip(*li) 8 9 10 iter1 = func(4) 11 print(list(iter1))
使用lambda
1 # 使用lambda和列表推导式 2 # 传入值: 返回值: 列表生成器生成的n个列表 3 func = lambda listvar, n: [listvar[i::n] for i in range(n)] 4 5 res = zip(*func(listvar, 2)) 6 print(list(res)) 7 8 # 优化: 9 func = lambda n: [[j for j in range(i + 1, 10, n)] for i in range(n)] 10 11 res = zip(*func(2)) 12 print(list(res))