为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2021-11-16 16:34:41
有一个 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]]


查看完整回答
反对 回复 2021-11-16
?
至尊宝的传说

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)]



查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信