python – 在列表中的每n个项目中获取一大块项目

说我有以下列表:

l = [4,3,1,5,3,5,8,11,10,4,12,2,1]

切片l的最pythonic方法是什么,以获得长度为n的块,在块之间留下k个项目?

例如,如果n = 2且k = 3,则结果应为:

[4,3,5,8,12,2]

最佳答案 使用列表理解:

[e for i in range(0, len(l), n+k) for e in l[i:i+n]]
# [4, 3, 5, 8, 12, 2]

一个笨拙的解决方案是:

import numpy as np

idx = (np.arange(0, len(l), n+k)[:,None] + np.arange(n)).ravel()
np.array(l)[idx]
# array([ 4,  3,  5,  8, 12,  2])
点赞