猿问

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

有一个 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) 必须小于参数长度,不能太长


喵喔喔
浏览 212回答 2
2回答

慕桂英546537

此任务不需要递归。您可以简单地遍历列表并继续将当前项目与最后一个块的第一个项目进行比较,如果差异大于或等于 20 或最后一个块已达到您的最大块大小,则附加一个新的子列表:intlist = [2, 4, 5, 18, 23, 24, 67, 72, 77, 83, 84, 90]chunks = []for i in intlist:&nbsp; &nbsp; if not chunks or i - chunks[-1][0] >= 20 or len(chunks[-1]) == 4:&nbsp; &nbsp; &nbsp; &nbsp; chunks.append([])&nbsp; &nbsp; chunks[-1].append(i)chunks 变成:[[2, 4, 5, 18], [23, 24], [67, 72, 77, 83], [84, 90]]

至尊宝的传说

我不确定我是否理解您的问题,但这里有一行可能可以解决您的问题。希望就是这样!int_list = [1,2,3,4,5,6,7,5,8,45,2,1,43,6,7,3]chunks_size = 4chuncks = [int_list[chunks_size*i:chunks_size*(i+1)] for i in range(int(len(int_list) / chunks_size) + 1)]
随时随地看视频慕课网APP

相关分类

Python
我要回答