这是一个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)必须小于参数长度,不能太长
答案 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)]