如何使用递归将列表分成多个块?

时间:2019-02-22 15:43:39

标签: python slice

这是一个int增加的列表,我想一步一步地将其分成几部分,如下所示:

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

,但每个大块列表必须匹配list[-1] - list[0] < 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]

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

2 个答案:

答案 0 :(得分:1)

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

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)

chunks变为:

[[2, 4, 5, 18], [23, 24], [67, 72, 77, 83], [84, 90]]

答案 1 :(得分:0)

我不确定我是否理解您的问题,但这是一条可以解决您问题的方法。 希望是这样!

int_list = [1,2,3,4,5,6,7,5,8,45,2,1,43,6,7,3]
chunks_size = 4
chuncks = [int_list[chunks_size*i:chunks_size*(i+1)] for i in range(int(len(int_list) / chunks_size) + 1)]