itertools.combinations生成的组合是否始终保持有序?
关于itertools.combinations生成组合的有序性问题
是的,只要传入的输入序列是已排序的,itertools.combinations生成的所有组合都会始终保持有序:
- 每个组合内部的元素顺序和原序列中的顺序完全一致,不会出现逆序元素;
- 组合之间也会按照字典序排列,整体符合原序列的排序逻辑。
原因说明
itertools.combinations的核心逻辑是从输入序列中按元素在原序列的位置顺序选取元素,生成的是输入序列的所有长度为n的子序列(而非排列)。它不会打乱原序列的元素顺序,只会按位置依次选取不重复的元素组合。
结合示例验证
你用已排序的range(5,9)作为输入,生成的所有三元组都是升序排列,且组合整体也按字典序排列,完全符合原序列的顺序规律:
from itertools import combinations start = 5 end = start+4 some_pos_number = 3 inds = list(combinations(range(start,end),some_pos_number)) # 输出结果:[(5, 6, 7), (5, 6, 8), (5, 7, 8), (6, 7, 8)]
需要注意的是,如果输入序列本身无序,生成的组合内部元素会保留原序列中的出现顺序,但组合之间的排序不会是自然有序的。但只要输入是已排序状态,输出的所有组合就都会保持有序。
内容的提问来源于stack exchange,提问作者Benny K
相关产品推荐
相关产品推荐

