python 生成一组相同数字_从一组数字生成数字

我们可以假设一个像[14983267]这样的列表是一个数字序列14983267,然后我们在它上面加上两个逗号,一个在4后面,另一个在3之后,所以我们生成一个三元组的数字[14983267]。在

那么,可以生成多少个数字序列呢?在In [1]: import itertools

In [2]: a = range(1,10)

In [3]: a

Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [4]: len(list(itertools.permutations(a,9)))

Out[4]: 362880

当我们得到一个像437865192这样的数列,能产生多少个三重数?组合

8*7/2=28(在9个数字之间选择两个间隙)

或使用itertools.combinations

^{pr2}$

给定一个序列,我们将得到28个组合。在In [1]: a = [2,3,6,4,9,1,7,8,5]

In [2]: import itertools

In [4]: for i in itertools.combinations(range(1,9),2):

...: print [int(.join(a[:i[0]])), int(.join(a[i[0]:i[1]])), int(.join(a[i[1]:]))]

[2, 3, 6491785]

[2, 36, 491785]

[2, 364, 91785]

[2, 3649, 1785]

[2, 36491, 785]

[2, 364917, 85]

[2, 3649178, 5]

[23, 6, 491785]

[23, 64, 91785]

[23, 649, 1785]

[23, 6491, 785]

[23, 64917, 85]

[23, 649178, 5]

[236, 4, 91785]

[236, 49, 1785]

[236, 491, 785]

[236, 4917, 85]

[236, 49178, 5]

[2364, 9, 1785]

[2364, 91, 785]

[2364, 917, 85]

[2364, 9178, 5]

[23649, 1, 785]

[23649, 17, 85]

[23649, 178, 5]

[236491, 7, 85]

[236491, 78, 5]

[2364917, 8, 5]

因此将生成10160640(362880*28)个列表。

最终代码:In [15]: a=map(lambda x:str(x), range(1,10))

In [16]: a

Out[16]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [17]: result = []

In [18]: for seq in itertools.permutations(a,9):

...: for i in itertools.combinations(range(1,9),2):

...: result.append([int(.join(seq[:i[0]])), int(.join(seq[i[0]:i[1]])), int(.join(seq[i[1]:]))])

...:

In [19]: len(result)

Out[19]: 10160640

我们可以假设一个像[14983267]这样的列表是一个数字序列14983267,然后我们在它上面加上两个逗号,一个在4后面,另一个在3之后,所以我们生成一个三元组的数字[14983267]。在 那么,可以生成多少个数字序列呢?在In [1]: import itertools In [2]: a = range(1,10) In [3]: a Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9] In [4]: len(list(itertools.permutations(a,9))) Out[4]: 362880 当我们得到一个像437865192这样的数列,能产生多少个三重数?组合 8*7/2=28(在9个数字之间选择两个间隙) 或使用itertools.combinations ^{pr2}$ 给定一个序列,我们将得到28个组合。在In [1]: a = [2,3,6,4,9,1,7,8,5] In [2]: import itertools In [4]: for i in itertools.combinations(range(1,9),2): ...: print [int(.join(a[:i[0]])), int(.join(a[i[0]:i[1]])), int(.join(a[i[1]:]))] [2, 3, 6491785] [2, 36, 491785] [2, 364, 91785] [2, 3649, 1785] [2, 36491, 785] [2, 364917, 85] [2, 3649178, 5] [23, 6, 491785] [23, 64, 91785] [23, 649, 1785] [23, 6491, 785] [23, 64917, 85] [23, 649178, 5] [236, 4, 91785] [236, 49, 1785] [236, 491, 785] [236, 4917, 85] [236, 49178, 5] [2364, 9, 1785] [2364, 91, 785] [2364, 917, 85] [2364, 9178, 5] [23649, 1, 785] [23649, 17, 85] [23649, 178, 5] [236491, 7, 85] [236491, 78, 5] [2364917, 8, 5] 因此将生成10160640(362880*28)个列表。 最终代码:In [15]: a=map(lambda x:str(x), range(1,10)) In [16]: a Out[16]: [1, 2, 3, 4, 5, 6, 7, 8, 9] In [17]: result = [] In [18]: for seq in itertools.permutations(a,9): ...: for i in itertools.combinations(range(1,9),2): ...: result.append([int(.join(seq[:i[0]])), int(.join(seq[i[0]:i[1]])), int(.join(seq[i[1]:]))]) ...: In [19]: len(result) Out[19]: 10160640
经验分享 程序员 微信小程序 职场和发展