Python排列

时间:2013-12-24 15:28:23

标签: python

我正在尝试使用itertools.permutations函数生成pandigital数字,但每当我这样做时,它会将它们生成为一个单独的数字列表,这不是我想要的。

例如:

for x in itertools.permutations("1234"):
    print(x)

将产生:

('1', '2', '3', '4')
('1', '2', '4', '3')
('1', '3', '2', '4')
('1', '3', '4', '2')
('1', '4', '2', '3')
('1', '4', '3', '2'), etc.

而我希望它返回1234,1243,1324,1342,1423,1432等。我将如何以最佳方式进行此操作?

3 个答案:

答案 0 :(得分:5)

您需要具有内置str.join()功能的列表理解:

import itertools
a = [''.join(i) for i in itertools.permutations("1234") ]
print(a)

输出:

['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 :(得分:3)

itertools.permutations接受一个iterable并返回一个产生元组的迭代器。

使用join()返回一个字符串,该字符串是可迭代迭代中字符串的串联

join() DOCSitertools.permutations DOCS

使用此:

import itertools

for x in itertools.permutations("1234"):
    print (''.join(x))

<强>输出:

1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
....

答案 2 :(得分:2)

请参阅itertools.permutations返回元组。 看加入功能:

In [1]: ''.join(('1','2','3'))
Out[1]: '123'

试试这个:

for x in itertools.permutations("1234"):
        print ''.join(x)