# ###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]]
"""
listvar = [1, 2, 3, 4, 5, 6, 7, 8, 9]
'''
"""
n => 2
list1 = [1,3,5,7,9]
list2 = [2,4,6,8]
it = zip(list1,list2)
list1 = listvar[0::2]
list2 = listvar[1::2]
print(list(it))
n => 3
list1 = [1,4,7]
list2 = [2,5,8]
list3 = [3,6,9]
it = zip(list1,list2,list3)
list1 = listvar[0::3]
list2 = listvar[1::3]
list3 = listvar[2::3]
print(list(it))
n => 4
list1 = [1,5,9]
list2 = [2,6]
list3 = [3,7]
list4 = [4,8]
it = zip(list1,list2,list3,list4)
list1 = listvar[0::4]
list2 = listvar[1::4]
list3 = listvar[2::4]
list4 = listvar[3::4]
print(list(it))
"""
大概过程
# n = 2
# [1, 3, 5, 7, 9] [2, 4, 6, 8]
'''
li = []
for i in range(n):
li.append(listvar[i::n])
'''
n = 2
li = []
# 产出n个列表, n为用户输入
for i in range(n):
# 每次循环i都会加一, 就是下个列表的起始值
# n为步长, 最后可以获得n个列表, 然后传入zip组合
res = listvar[i::n]
# 将n个列表加入到一个列表中
li.append(res)
print(li)
# 将这个列表传入到zip, 使用*解包操作
res = zip(*li)
print(list(res))
使用函数封装
def func(n):
li = []
for i in range(n):
li.append(listvar[i::n])
# 放入zip中, 使用*解包
return zip(*li)
iter1 = func(4)
print(list(iter1))
使用lambda
# 使用lambda和列表推导式
# 传入值: 返回值: 列表生成器生成的n个列表
func = lambda listvar, n: [listvar[i::n] for i in range(n)]
res = zip(*func(listvar, 2))
print(list(res))
# 优化:
func = lambda n: [[j for j in range(i + 1, 10, n)] for i in range(n)]
res = zip(*func(2))
print(list(res))