面试题_滑动序列

# ###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))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容