You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中如何生成列表指定长度的连续升序数字组合

问题根源

itertools.permutations的作用是生成输入序列指定长度的全排列,生成结果既不保留元素在原列表的相邻位置关系,也不会自动做升序校验,因此会出现(1,3,2)这类乱序、元素不连续的结果,和「提取原列表连续三个元素构成升序元组」的需求不匹配。

实现方案

方案1:原生索引遍历(无额外依赖,可读性最高)

直接按索引遍历原列表,每次截取连续3个元素打包为元组即可,逻辑简单不容易出错:

lst = [1,2,3,4,5]
res = []
# 循环终止位置设为列表长度减2,避免索引超出范围
for idx in range(len(lst) - 2):
    res.append((lst[idx], lst[idx+1], lst[idx+2]))

print(res)

运行输出:

[(1, 2, 3), (2, 3, 4), (3, 4, 5)]

注意:如果输入列表本身不是升序状态,提前执行lst = sorted(lst)做排序即可保证输出符合升序要求。

方案2:itertools滑动窗口实现(适合大列表/通用窗口场景)

如果要适配任意长度的连续窗口,可以用itertools.islice构造错位迭代器,和原列表zip后自动生成连续元组,内存效率更高,适合处理超长列表:

from itertools import islice
lst = [1,2,3,4,5]
# 构造3个偏移量分别为0、1、2的迭代器,zip打包后刚好得到连续三元组
res = list(zip(lst, islice(lst, 1, None), islice(lst, 2, None)))
print(res)

运行输出和方案1完全一致。如果要生成n个元素的连续组,只需要对应增加对应偏移量的islice迭代器即可,不需要修改循环逻辑。


内容的提问来源于stack exchange,提问作者Hung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:36:20