我无法生成具有以下参数的数字列表:
理想情况下,我希望我的输出类似于此
list = [1123, 1213, 1231, 1223, 1232, 1233]
但不包括任何数字。
谢谢!
更新:
输入
digits = 5
输出
output = [11234, 12134, 12314, 12341, 12234, 12324, 12342, ... ]
对不起,这没什么可做的。我需要x位数的所有可能组合,以使数字1到x-1出现在每个条目中,并且每个条目都有一个重复的数字。您可以考虑一下,就好像重复的数字一直在重复下一个唯一整数之前一直沿行。
答案 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 to n+1
创建每个组合。
从for
到1
的{{1}}循环,用for循环变量n
替换了n+1
。
使用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]