我需要从另一个具有N=a*M元素(a>=1)的列表中生成M个列表,因此i分区的第n个元素被添加到I新列表的第n个位置(i=1..M,因此原始列表被分割成N/M长度的等份)。
用一个例子更容易理解:所以假设我有这个列表lg=[1,2,3,4,5,6,7,8,9],结果应该是l1=[1,4,7], l2=[2,5,8], l3=[3,6,9]
我是用这个代码做的:
lg=[1,2,3,4,5,6,7,8,9] # N=9
M=3
lr=[[] for _ in range(M)]
print(lr) # [[], [], []]
idx_lr = 0
for idx,el in enumerate(lg): # the enumerate is not necessary, was for testing purposes
lr[idx_lr].append(el)
idx_lr += 1
if idx_lr == M:
idx_lr = 0
print(lr) #[[1, 4, 7], [2, 5, 8], [3, 6, 9]]它可以工作,但是,这是一段丑陋的代码,有一种方法可以用一行函数来完成吗?
发布于 2022-11-06 15:27:18
您可以通过简单的切片操作来完成此操作:
>>> lg=[1,2,3,4,5,6,7,8,9]
>>> [lg[i::3] for i in range(3)]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]切片的第三部分是片中每个元素之间的“步骤”;它默认为1,但将其设置为M使其接受每个Mth元素。
https://stackoverflow.com/questions/74337178
复制相似问题