有一个 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 increasefor 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 回答

慕桂英546537
TA贡献1848条经验 获得超10个赞
此任务不需要递归。您可以简单地遍历列表并继续将当前项目与最后一个块的第一个项目进行比较,如果差异大于或等于 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]]

至尊宝的传说
TA贡献1789条经验 获得超10个赞
我不确定我是否理解您的问题,但这里有一行可能可以解决您的问题。希望就是这样!
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)]
添加回答
举报
0/150
提交
取消