如何修改分块函数以生成数值列表的全部连续重叠区间?
生成重叠连续区间的解决方法
嘿,要得到你想要的这种重叠相邻区间,核心是调整遍历序列时的步长——原来的代码每次跳2个位置(和块大小一致),所以会跳过中间的重叠点,现在我们改成每次只移动1个位置就好啦。
方法一:修改通用分块函数
如果你还想保留chunker这个通用函数,只需要把遍历的步长从size改成1,同时调整范围避免越界:
def chunker(seq, size): # 步长改为1,确保每次移动一个位置实现重叠;范围限制到len(seq)-size+1,避免最后一块长度不足 return (seq[pos:pos + size] for pos in range(len(seq) - size + 1)) l1 = [0,1000,5000,10000,20000,30000,40000,50000] for group in chunker(l1, 2): print(group)
运行这段代码就会输出你想要的结果:
[0, 1000]
[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]
方法二:更直观的针对性写法
如果你的需求只是生成两两相邻的重叠对,不需要通用分块功能,直接遍历索引会更清晰:
l1 = [0,1000,5000,10000,20000,30000,40000,50000] for i in range(len(l1) - 1): print([l1[i], l1[i+1]])
这个写法直接取每个元素和它的下一个元素组成对,逻辑一目了然。
内容的提问来源于stack exchange,提问作者Zizzipupp
相关产品推荐
相关产品推荐

