如何用单行函数实现将列表按指定位置拆分生成M个子列表?
单行实现按列提取分区元素生成子列表
直接利用Python列表的切片步长特性,就能一行代码搞定需求:
lg = [1,2,3,4,5,6,7,8,9] M = 3 sub_lists = [lg[i::M] for i in range(M)]
执行后得到的sub_lists就是[[1,4,7], [2,5,8], [3,6,9]],完全符合预期。
原理说明
lg[i::M]表示从原列表的第i个元素开始,每隔M个元素取一个值。对应到需求里,原列表拆分为长度为N/M的分区后,每个分区的第i个元素在原列表中的索引正好是i, i+M, i+2M...,切片操作直接就能提取出目标子列表。- 用列表推导式遍历
0到M-1的索引,一次性生成所有M个子列表,完美实现单行代码的要求。
这个写法适用于所有满足N=a*M(a≥1)的情况,比如当lg=[1,2,3,4]、M=2时,会得到[[1,3], [2,4]],完全符合规则。
内容的提问来源于stack exchange,提问作者NewbieInFlask
相关产品推荐
相关产品推荐

