Python:我需要帮助来生成特定格式的数字列表

时间:2018-07-06 07:21:23

标签: python math numbers

我无法生成具有以下参数的数字列表:

  1. 用户指定的位数
  2. 重复一个数字
  3. 使用此模式创建所有可能的组合

理想情况下,我希望我的输出类似于此

list = [1123, 1213, 1231, 1223, 1232, 1233]

但不包括任何数字。

谢谢!

更新:

输入

digits = 5

输出

output = [11234, 12134, 12314, 12341, 12234, 12324, 12342, ... ] 

对不起,这没什么可做的。我需要x位数的所有可能组合,以使数字1到x-1出现在每个条目中,并且每个条目都有一个重复的数字。您可以考虑一下,就好像重复的数字一直在重复下一个唯一整数之前一直沿行。

3 个答案:

答案 0 :(得分:0)

这不是真正的pythonic解决方案,但我发现了。您可以将数字作为用户的输入。

digit = 5
list = []
val = []
temp = []
for i in range(1,digit):
    i = str(i)
    val.append(i)
    temp.append(i)
for i,num1 in enumerate(val):
    for j, num2 in enumerate(val):
        if int(i) <= int(j):
            temp.insert(int(j+1),num1)
            list.append("".join(temp))
            temp = []
            for k in range(1,digit):
                k = str(k)
                temp.append(k)
result = map(int,list) # Convert all element of list to int
print(result)

输出

[11234, 12134, 12314, 12341, 12234, 12324, 12342, 12334, 12343, 12344]

答案 1 :(得分:0)

这是我的建议:

给出指定的数字n

  1. 使用数字1 to n+1创建每个组合。

  2. for1的{​​{1}}循环,用for循环变量n替换了n+1

  3. 使用i摆脱重复的组合。

希望此伪代码可以为您提供帮助。

答案 2 :(得分:0)

您可以使用itertools.permutations进行此操作。

permutations('123')将为您提供所有可以用数字1,2,3生成但以元组格式的数字。

list(permutations('123'))
[('1', '2', '3'), ('1', '3', '2'), ('2', '1', '3'), ('2', '3', '1'), ('3', '1', '2'), ('3', '2', '1')]

所以您可以做类似的事情

from itertools import permutations, chain
n=3
tpls = [permutations(chain([i], range(1,n)), n) for i in range(1, n)]
# tpls contains all possible answers in tuple format

# To convert it to list of numbers
f = lambda t: int(''.join(map(str, t)))
[f(x) for x in chain(*tpls)]
# [112, 121, 112, 121, 211, 211, 212, 221, 122, 122, 221, 212]