导航

面试题_滑动序列

Posted on 2019-03-29 22:27  菜花教授  阅读(95)  评论(0编辑  收藏  举报
 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))