簡體   English   中英

如何串聯從python permutations()返回的數字?

[英]how to concatenate the numbers returned from python permutations()?

我有以下代碼生成范圍為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]獲得某些元素?

只需匯總每個結果:

p = permutations(range(10), 2)
result = [str(x[0]) + str(x[1]) for x in p]

一個(可能不是最有效的)單線:

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

要么:

[("%d"*len(p[0]))%(elem) for elem in p]
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',
...

使用列表理解:

p = permutations(range(10), 2)
result = [ "%d%d" % (x[0], x[1]) for x in p ]

正如我和約翰·克萊門茨(John Clements)在評論中指出的那樣,無需進行排列即可制作所需的字符串或數字。

數字0到9的兩個置換僅表示1到98的整數,沒有任何重復的數字。 方便地,所有具有重復數字的2位數字都是11的倍數,因此您可以輕松地使列表理解或生成器表達式跳過不需要的數字:

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

如果希望結果是兩個字符的字符串列表,則可以使用帶格式字符串的format函數,該字符串表示要用零填充一位數字:

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

不幸的是,將這種技術擴展到更長的數字會有點困難,因為僅跳過11的倍數將不再削減它。 最好的方法將取決於您實際使用的值。

這有效:

>>> 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開頭的整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM