1

0 ~ 9 の範囲ですべての 2 桁の順列を生成する次のコードがあります。

p = permutations(range(10), 2)

これにより、次のような結果が得られます。

(0, 1); (0, 2); (0, 3); (0, 4); (0, 5); (0, 6); (0, 7); (0, 8); (0, 9); (1, 0); (1, 2); (1, 3); (1, 4); (1, 5); (1,6); (1, 7); (1,8); (1, 9); (2, 0); (2,1); (2, 3); (2, 4); (2,5); (2,6); (2, 7); (2,8); (2, 9); (3, 0); (3,1); (3, 2); (3, 4); (3, 5); (3,6); (3, 7); (3,8); (3, 9); (4, 0); (4,1); (4, 2); (4, 3); (4, 5); (4,6); (4, 7); (4,8); (4, 9); (5,0); (5,1); (5, 2); (5, 3); (5, 4); (5,6); (5, 7); (5,8); (5, 9); (6, 0); (6,1); (6, 2); (6, 3); (6, 4); (6, 5); (6, 7); (6, 8); (6, 9); (7, 0); (7, 1); (7, 2); (7, 3); (7, 4); (7, 5); (7,6); (7,8); (7, 9); (8, 0); (8, 1); (8, 2); (8, 3); (8, 4); (8, 5); (8,6); (8, 7); (8, 9); (9,0); (9,1); (9, 2); (9, 3); (9, 4); (9, 5); (9,6); (9, 7); (9,8)

次のような出力を取得するにはどうすればよい[01,02,03....98]ですか? p[0] を呼び出して特定の要素を取得できますか?

4

6 に答える 6

2

各結果を集計するだけです:

p = permutations(range(10), 2)
result = [str(x[0]) + str(x[1]) for x in p]
于 2013-10-06T18:45:42.287 に答える
2

(おそらく最も効率的ではない)ワンライナー:

["".join([str(x) for x in elem]) for elem in p]

または:

[("%d"*len(p[0]))%(elem) for elem in p]
于 2013-10-06T18:47:05.740 に答える
2
In [13]: import itertools as IT
In [17]: p = IT.permutations(range(10), 2)

In [18]: list(IT.starmap('{}{}'.format, p))
Out[18]: 
['01',
 '02',
 '03',
 '04',
...
于 2013-10-06T18:47:19.710 に答える
1

リスト内包表記を使用します。

p = permutations(range(10), 2)
result = [ "%d%d" % (x[0], x[1]) for x in p ]
于 2013-10-06T18:48:40.097 に答える
1

John Clements と私がコメントで指摘したように、並べ替えを行わなくても、必要な文字列または数値を作成できます。

0 から 9 までの数字の 2 つの順列は、1 から 98 までの数字を繰り返しない整数を単純に表します。便利なことに、数字が繰り返される 2 桁の数字はすべて 11 の倍数なので、不要な数字をスキップするリスト内包表記またはジェネレーター式を簡単に作成できます。

nums = [i for i in range(1, 99) if i % 11]

結果を 2 文字の文字列のリストにしたい場合は、format1 桁の数字をゼロで埋めるように指示するフォーマット文字列で関数を使用します。

strings = [format(i, '02') for i in range(1, 99) if i % 11]

残念ながら、この手法をより長い数に拡張するのは少し難しくなります。11 の倍数をスキップするだけでは、それ以上うまくいかないからです。最良のアプローチが何であるかは、おそらく、取得した値で実際に何をしているかによって異なります。

于 2013-10-06T22:27:27.000 に答える
0

これは機能します:

>>> from itertools import permutations
>>> ["%i%i" % (a,b) for a,b in permutations(range(10), 2)]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '12', '13', '14', '15',
'16', '17', '18', '19', '20', '21', '23', '24', '25', '26', '27', '28', '29', '30', 
'31', '32', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '45', '46', 
'47', '48', '49', '50', '51', '52', '53', '54', '56', '57', '58', '59', '60', '61', 
'62', '63', '64', '65', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', 
'78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '89', '90', '91', '92', 
'93', '94', '95', '96', '97', '98']
>>>

または、それらを整数として使用する場合は、次のようにすることができます。

>>> from itertools import permutations
>>> [int("%i%i" % (a, b)) for a,b in permutations(range(10), 2)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 
26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 
49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, 
72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 
95, 96, 97, 98]
>>>

ただし、Python では 0 で始まる整数を使用できないことに注意してください。

于 2013-10-06T18:50:45.293 に答える