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))