如何使用递归将列表拆分为块?

问题描述 投票:-1回答:2

这是一个增加int的列表,我想逐步将它分成块,如下所示:

for i in range(0, len(intlist), length):
    chunks.append(intlist[i, i+length])

但每个大块的列表必须匹配qazxsw poi。如果不匹配,那么试试qazxsw poi

例如:

list[-1] - list[0] < 20

特别是,len(i)必须小于参数长度,它不能太长

python slice
2个回答
1
投票

您不需要递归来执行此任务。您可以简单地遍历列表并继续将当前项目与最后一个块的第一项进行比较,如果差异大于或等于20,或者如果最后一个块已达到最大块大小,则附加新的子列表:

chunks.append(intlist[i, i+length-1])

chunks = [] intlist = [2, 4, 5, 18, 23, 24, 67, 72, 77, 83, 84, 90] # item keep increase for i in range(0, len(intlist), 4): chunks.append(intlist[i:i+4]) # output # item in chunks [2, 4, 5, 18] # step 4 match [23, 24] # 67-23>20 don't mach [67, 72, 77, 84] # match [90] 成为:

intlist = [2, 4, 5, 18, 23, 24, 67, 72, 77, 83, 84, 90]
chunks = []
for i in intlist:
    if not chunks or i - chunks[-1][0] >= 20 or len(chunks[-1]) == 4:
        chunks.append([])
    chunks[-1].append(i)

0
投票

我不确定我是否理解你的问题,但这里有一行可以解决你的问题。希望就是这样!

chunks
© www.soinside.com 2019 - 2024. All rights reserved.