首页 > 解决方案 > 如何增量创建数字组合?

问题描述

给定以下数字: [0, 1, 2, 3, 4, 5]

只要该数字中没有重复的数字,我想创建所有可能的组合:

0
01
02
...
54
012
013
014
...
054
0123
01234
...
054321
...
154
...
543210

我已经能够通过这样做来开始这个,但我不认为它是可扩展的:

for key in keys:    
    for key2 in keys:
        if key != key2:
            print(f'{key}{key2}')

标签: python

解决方案


似乎您正在寻求增加可用itertools于此的排列数量:

from itertools import permutations
from pprint import pprint

data = range(6)

def inc_perms(it):
    for i, _ in enumerate(data):
        yield from permutations(data,  i)

pprint(list(inc_perms(data)))

[(0,),
 (0, 1),
 (1, 0),
 (0, 1, 2),
 (0, 2, 1),
 (1, 0, 2),
 (1, 2, 0),
 (2, 0, 1),
 (2, 1, 0),
 (0, 1, 2, 3),
 (0, 1, 3, 2),
 (0, 2, 1, 3),
 (0, 2, 3, 1),
 (0, 3, 1, 2),
 (0, 3, 2, 1),
 (1, 0, 2, 3),
 (1, 0, 3, 2),
 (1, 2, 0, 3),
 (1, 2, 3, 0),
 (1, 3, 0, 2),
 (1, 3, 2, 0),
 (2, 0, 1, 3),
 (2, 0, 3, 1),
 (2, 1, 0, 3),
 (2, 1, 3, 0),
 (2, 3, 0, 1),
 (2, 3, 1, 0),
 (3, 0, 1, 2),
 (3, 0, 2, 1),
 (3, 1, 0, 2),
 (3, 1, 2, 0),
 (3, 2, 0, 1),
 (3, 2, 1, 0),
 (0, 1, 2, 3, 4),
 (0, 1, 2, 4, 3),
 (0, 1, 3, 2, 4),
 (0, 1, 3, 4, 2),
 (0, 1, 4, 2, 3),
 (0, 1, 4, 3, 2),
 (0, 2, 1, 3, 4),
 (0, 2, 1, 4, 3),
 (0, 2, 3, 1, 4),
 (0, 2, 3, 4, 1),
 (0, 2, 4, 1, 3),
 (0, 2, 4, 3, 1),
 (0, 3, 1, 2, 4),
 (0, 3, 1, 4, 2),
 (0, 3, 2, 1, 4),
 (0, 3, 2, 4, 1),
 (0, 3, 4, 1, 2),
 (0, 3, 4, 2, 1),
 (0, 4, 1, 2, 3),
 (0, 4, 1, 3, 2),
 (0, 4, 2, 1, 3),
 (0, 4, 2, 3, 1),
 (0, 4, 3, 1, 2),
 (0, 4, 3, 2, 1),
 (1, 0, 2, 3, 4),
 (1, 0, 2, 4, 3),
 (1, 0, 3, 2, 4),
 (1, 0, 3, 4, 2),
 (1, 0, 4, 2, 3),
 (1, 0, 4, 3, 2),
 (1, 2, 0, 3, 4),
 (1, 2, 0, 4, 3),
 (1, 2, 3, 0, 4),
 (1, 2, 3, 4, 0),
 (1, 2, 4, 0, 3),
 (1, 2, 4, 3, 0),
 (1, 3, 0, 2, 4),
 (1, 3, 0, 4, 2),
 (1, 3, 2, 0, 4),
 (1, 3, 2, 4, 0), ...

推荐阅读