我需要从线性整数列表(不能从0开始)中获得“相等”步长切片,但需要满足以下要求:
一些例子:
使用来自range(10)
和步骤2的列表,结果应为以下之一:
[0, 2, 5, 7, 9]
[0, 2, 4, 7, 9]
使用range(21)
和步骤3:
[0, 3, 7, 10, 14, 17, 20]
使用range(1, 22)
和步骤3:
[1, 4, 8, 11, 15, 18, 21]
现在我有类似的东西,显然不能正常工作:
def getSlices(l, s):
skipCount = (len(l) - 1) % s
divCount = int(len(l) / (skipCount + 1))
o = []
for delta, skip in enumerate(range(skipCount + 1)):
o.extend(l[skip * divCount + delta:(skip + 1) * divCount + delta:s])
return o
>>> getSlices(list(range(21)), 3)
[0, 3, 6, 8, 11, 14, 16, 19]
我知道我可以循环遍历所有值,通过关联enumerate
索引和步骤跳过,并在到达列表的新“部分”时添加“增量”,但这似乎不是最有效的解决方案
我想这可能是你想要的。希望能有帮助
相关问题 更多 >
编程相关推荐