我需要一个能够运行4个数字的可能组合的代码,例如1234将产生12个,1243个,1324个等的24个组合。但不做['1','12','123'等等我希望它只有4个数字长度组合,(只是改变顺序)
import random
将4个数字中的一个随机化,将另一个和另一个数字随机化,检查该组合是否已被打印或者是否已添加到包含可能组合的数组中,然后最终打印出所有这些组合。
array = ['1234', '1243', '1342', '1324' ect]
这需要很长时间,效率非常低。
编码很新:)
感谢
答案 0 :(得分:3)
使用itertools.permutations()和str.join()函数的解决方案:
import itertools
n = '1234'
a = [''.join(i) for i in itertools.permutations(n, 4)]
print(a) # prints 24 permutations
输出:
['1234', '1243', '1324', '1342', '1423', '1432', '2134', '2143', '2314', '2341', '2413', '2431', '3124', '3142', '3214', '3241', '3412', '3421', '4123', '4132', '4213', '4231', '4312', '4321']
答案 1 :(得分:0)
您可以在python中使用内置模块itertools
。请参阅此问题here
import itertools
array = itertools.permutations([1, 2, 3, 4])
for eachpermutation in array:
print(eachpermutation )
应该给你这样的输出
(1, 2, 3, 4)
(1, 2, 4, 3)
(1, 3, 2, 4)
(1, 3, 4, 2)
(1, 4, 2, 3)
(1, 4, 3, 2)
(2, 1, 3, 4)
(2, 1, 4, 3)
(2, 3, 1, 4)
(2, 3, 4, 1)
(2, 4, 1, 3)
(2, 4, 3, 1)
(3, 1, 2, 4)
(3, 1, 4, 2)
(3, 2, 1, 4)
(3, 2, 4, 1)
(3, 4, 1, 2)
(3, 4, 2, 1)
(4, 1, 2, 3)
(4, 1, 3, 2)
(4, 2, 1, 3)
(4, 2, 3, 1)
(4, 3, 1, 2)
(4, 3, 2, 1)
如果您需要将子列表连接成一个数字,可以使用提供的答案here
for eachpermutation in array:
print(int(''.join(str(i) for i in eachpermutation )))
为您提供以下输出
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321
希望有所帮助