如何以增量方式创建数字组合?

2024-04-26 01:38:30 发布

您现在位置:Python中文网/ 问答频道 /正文

鉴于以下数字: [0, 1, 2, 3, 4, 5]

我想创建所有可能的组合,只要该数字中没有重复的数字:

0
01
02
...
54
012
013
014
...
054
0123
01234
...
054321
...
154
...
543210

我已经能够通过这样做开始,但我认为它不可扩展:

for key in keys:    
    for key2 in keys:
        if key != key2:
            print(f'{key}{key2}')

Tags: keyinforif数字keysprintkey2
2条回答

因为输出的顺序很重要(021102都存在),所以可以使用排列。你们需要1-置换,2-置换,…,N-置换,其中N是列表的长度。所以我们需要一个外环

from itertools import permutations

nums = [0, 1, 2, 3, 4, 5]
length = len(nums )

for k in range(1, length + 1):
    for perm in permutations(nums, k):
        print("".join(map(str, perm)))

join(map..是将数字序列打印为单个胶合字符串)

这印了很多东西

0
1
2
3
4
5
01
02
03
04
05
10
12
13
14
15
20
21
23
24
25
30
31
32
34
35
40
41
42
43
45
50
51
52
53
54
012
013
014
015
021
023
024
025
031
032
034
035
041
042
043
045
051
052
053
054
102
103
104
105
120
123
124
125
130
132
134
135
140
142
143
145
150
152
153
154
201
203
204
205
210
213
214
215
230
231
234
235
240
241
243
245
250
251
253
254
301
302
304
305
310
312
314
315
320
321
324
325
340
341
342
345
350
351
352
354
401
402
403
405
410
412
413
415
420
421
423
425
430
431
432
435
450
451
452
453
501
502
503
504
510
512
513
514
520
521
523
524
530
531
532
534
540
541
542
543
0123
0124
0125
0132
0134
0135
0142
0143
0145
0152
0153
0154
0213
0214
0215
0231
0234
0235
0241
0243
0245
0251
0253
0254
0312
0314
0315
0321
0324
0325
0341
0342
0345
0351
0352
0354
0412
0413
0415
0421
0423
0425
0431
0432
0435
0451
0452
0453
0512
0513
0514
0521
0523
0524
0531
0532
0534
0541
0542
0543
1023
1024
1025
1032
1034
1035
1042
1043
1045
1052
1053
1054
1203
1204
1205
1230
1234
1235
1240
1243
1245
1250
1253
1254
1302
1304
1305
1320
1324
1325
1340
1342
1345
1350
1352
1354
1402
1403
1405
1420
1423
1425
1430
1432
1435
1450
1452
1453
1502
1503
1504
1520
1523
1524
1530
1532
1534
1540
1542
1543
2013
2014
2015
2031
2034
2035
2041
2043
2045
2051
2053
2054
2103
2104
2105
2130
2134
2135
2140
2143
2145
2150
2153
2154
2301
2304
2305
2310
2314
2315
2340
2341
2345
2350
2351
2354
2401
2403
2405
2410
2413
2415
2430
2431
2435
2450
2451
2453
2501
2503
2504
2510
2513
2514
2530
2531
2534
2540
2541
2543
3012
3014
3015
3021
3024
3025
3041
3042
3045
3051
3052
3054
3102
3104
3105
3120
3124
3125
3140
3142
3145
3150
3152
3154
3201
3204
3205
3210
3214
3215
3240
3241
3245
3250
3251
3254
3401
3402
3405
3410
3412
3415
3420
3421
3425
3450
3451
3452
3501
3502
3504
3510
3512
3514
3520
3521
3524
3540
3541
3542
4012
4013
4015
4021
4023
4025
4031
4032
4035
4051
4052
4053
4102
4103
4105
4120
4123
4125
4130
4132
4135
4150
4152
4153
4201
4203
4205
4210
4213
4215
4230
4231
4235
4250
4251
4253
4301
4302
4305
4310
4312
4315
4320
4321
4325
4350
4351
4352
4501
4502
4503
4510
4512
4513
4520
4521
4523
4530
4531
4532
5012
5013
5014
5021
5023
5024
5031
5032
5034
5041
5042
5043
5102
5103
5104
5120
5123
5124
5130
5132
5134
5140
5142
5143
5201
5203
5204
5210
5213
5214
5230
5231
5234
5240
5241
5243
5301
5302
5304
5310
5312
5314
5320
5321
5324
5340
5341
5342
5401
5402
5403
5410
5412
5413
5420
5421
5423
5430
5431
5432
01234
01235
01243
01245
01253
01254
01324
01325
01342
01345
01352
01354
01423
01425
01432
01435
01452
01453
01523
01524
01532
01534
01542
01543
02134
02135
02143
02145
02153
02154
02314
02315
02341
02345
02351
02354
02413
02415
02431
02435
02451
02453
02513
02514
02531
02534
02541
02543
03124
03125
03142
03145
03152
03154
03214
03215
03241
03245
03251
03254
03412
03415
03421
03425
03451
03452
03512
03514
03521
03524
03541
03542
04123
04125
04132
04135
04152
04153
04213
04215
04231
04235
04251
04253
04312
04315
04321
04325
04351
04352
04512
04513
04521
04523
04531
04532
05123
05124
05132
05134
05142
05143
05213
05214
05231
05234
05241
05243
05312
05314
05321
05324
05341
05342
05412
05413
05421
05423
05431
05432
10234
10235
10243
10245
10253
10254
10324
10325
10342
10345
10352
10354
10423
10425
10432
10435
10452
10453
10523
10524
10532
10534
10542
10543
12034
12035
12043
12045
12053
12054
12304
12305
12340
12345
12350
12354
12403
12405
12430
12435
12450
12453
12503
12504
12530
12534
12540
12543
13024
13025
13042
13045
13052
13054
13204
13205
13240
13245
13250
13254
13402
13405
13420
13425
13450
13452
13502
13504
13520
13524
13540
13542
14023
14025
14032
14035
14052
14053
14203
14205
14230
14235
14250
14253
14302
14305
14320
14325
14350
14352
14502
14503
14520
14523
14530
14532
15023
15024
15032
15034
15042
15043
15203
15204
15230
15234
15240
15243
15302
15304
15320
15324
15340
15342
15402
15403
15420
15423
15430
15432
20134
20135
20143
20145
20153
20154
20314
20315
20341
20345
20351
20354
20413
20415
20431
20435
20451
20453
20513
20514
20531
20534
20541
20543
21034
21035
21043
21045
21053
21054
21304
21305
21340
21345
21350
21354
21403
21405
21430
21435
21450
21453
21503
21504
21530
21534
21540
21543
23014
23015
23041
23045
23051
23054
23104
23105
23140
23145
23150
23154
23401
23405
23410
23415
23450
23451
23501
23504
23510
23514
23540
23541
24013
24015
24031
24035
24051
24053
24103
24105
24130
24135
24150
24153
24301
24305
24310
24315
24350
24351
24501
24503
24510
24513
24530
24531
25013
25014
25031
25034
25041
25043
25103
25104
25130
25134
25140
25143
25301
25304
25310
25314
25340
25341
25401
25403
25410
25413
25430
25431
30124
30125
30142
30145
30152
30154
30214
30215
30241
30245
30251
30254
30412
30415
30421
30425
30451
30452
30512
30514
30521
30524
30541
30542
31024
31025
31042
31045
31052
31054
31204
31205
31240
31245
31250
31254
31402
31405
31420
31425
31450
31452
31502
31504
31520
31524
31540
31542
32014
32015
32041
32045
32051
32054
32104
32105
32140
32145
32150
32154
32401
32405
32410
32415
32450
32451
32501
32504
32510
32514
32540
32541
34012
34015
34021
34025
34051
34052
34102
34105
34120
34125
34150
34152
34201
34205
34210
34215
34250
34251
34501
34502
34510
34512
34520
34521
35012
35014
35021
35024
35041
35042
35102
35104
35120
35124
35140
35142
35201
35204
35210
35214
35240
35241
35401
35402
35410
35412
35420
35421
40123
40125
40132
40135
40152
40153
40213
40215
40231
40235
40251
40253
40312
40315
40321
40325
40351
40352
40512
40513
40521
40523
40531
40532
41023
41025
41032
41035
41052
41053
41203
41205
41230
41235
41250
41253
41302
41305
41320
41325
41350
41352
41502
41503
41520
41523
41530
41532
42013
42015
42031
42035
42051
42053
42103
42105
42130
42135
42150
42153
42301
42305
42310
42315
42350
42351
42501
42503
42510
42513
42530
42531
43012
43015
43021
43025
43051
43052
43102
43105
43120
43125
43150
43152
43201
43205
43210
43215
43250
43251
43501
43502
43510
43512
43520
43521
45012
45013
45021
45023
45031
45032
45102
45103
45120
45123
45130
45132
45201
45203
45210
45213
45230
45231
45301
45302
45310
45312
45320
45321
50123
50124
50132
50134
50142
50143
50213
50214
50231
50234
50241
50243
50312
50314
50321
50324
50341
50342
50412
50413
50421
50423
50431
50432
51023
51024
51032
51034
51042
51043
51203
51204
51230
51234
51240
51243
51302
51304
51320
51324
51340
51342
51402
51403
51420
51423
51430
51432
52013
52014
52031
52034
52041
52043
52103
52104
52130
52134
52140
52143
52301
52304
52310
52314
52340
52341
52401
52403
52410
52413
52430
52431
53012
53014
53021
53024
53041
53042
53102
53104
53120
53124
53140
53142
53201
53204
53210
53214
53240
53241
53401
53402
53410
53412
53420
53421
54012
54013
54021
54023
54031
54032
54102
54103
54120
54123
54130
54132
54201
54203
54210
54213
54230
54231
54301
54302
54310
54312
54320
54321
012345
012354
012435
012453
012534
012543
013245
013254
013425
013452
013524
013542
014235
014253
014325
014352
014523
014532
015234
015243
015324
015342
015423
015432
021345
021354
021435
021453
021534
021543
023145
023154
023415
023451
023514
023541
024135
024153
024315
024351
024513
024531
025134
025143
025314
025341
025413
025431
031245
031254
031425
031452
031524
031542
032145
032154
032415
032451
032514
032541
034125
034152
034215
034251
034512
034521
035124
035142
035214
035241
035412
035421
041235
041253
041325
041352
041523
041532
042135
042153
042315
042351
042513
042531
043125
043152
043215
043251
043512
043521
045123
045132
045213
045231
045312
045321
051234
051243
051324
051342
051423
051432
052134
052143
052314
052341
052413
052431
053124
053142
053214
053241
053412
053421
054123
054132
054213
054231
054312
054321
102345
102354
102435
102453
102534
102543
103245
103254
103425
103452
103524
103542
104235
104253
104325
104352
104523
104532
105234
105243
105324
105342
105423
105432
120345
120354
120435
120453
120534
120543
123045
123054
123405
123450
123504
123540
124035
124053
124305
124350
124503
124530
125034
125043
125304
125340
125403
125430
130245
130254
130425
130452
130524
130542
132045
132054
132405
132450
132504
132540
134025
134052
134205
134250
134502
134520
135024
135042
135204
135240
135402
135420
140235
140253
140325
140352
140523
140532
142035
142053
142305
142350
142503
142530
143025
143052
143205
143250
143502
143520
145023
145032
145203
145230
145302
145320
150234
150243
150324
150342
150423
150432
152034
152043
152304
152340
152403
152430
153024
153042
153204
153240
153402
153420
154023
154032
154203
154230
154302
154320
201345
201354
201435
201453
201534
201543
203145
203154
203415
203451
203514
203541
204135
204153
204315
204351
204513
204531
205134
205143
205314
205341
205413
205431
210345
210354
210435
210453
210534
210543
213045
213054
213405
213450
213504
213540
214035
214053
214305
214350
214503
214530
215034
215043
215304
215340
215403
215430
230145
230154
230415
230451
230514
230541
231045
231054
231405
231450
231504
231540
234015
234051
234105
234150
234501
234510
235014
235041
235104
235140
235401
235410
240135
240153
240315
240351
240513
240531
241035
241053
241305
241350
241503
241530
243015
243051
243105
243150
243501
243510
245013
245031
245103
245130
245301
245310
250134
250143
250314
250341
250413
250431
251034
251043
251304
251340
251403
251430
253014
253041
253104
253140
253401
253410
254013
254031
254103
254130
254301
254310
301245
301254
301425
301452
301524
301542
302145
302154
302415
302451
302514
302541
304125
304152
304215
304251
304512
304521
305124
305142
305214
305241
305412
305421
310245
310254
310425
310452
310524
310542
312045
312054
312405
312450
312504
312540
314025
314052
314205
314250
314502
314520
315024
315042
315204
315240
315402
315420
320145
320154
320415
320451
320514
320541
321045
321054
321405
321450
321504
321540
324015
324051
324105
324150
324501
324510
325014
325041
325104
325140
325401
325410
340125
340152
340215
340251
340512
340521
341025
341052
341205
341250
341502
341520
342015
342051
342105
342150
342501
342510
345012
345021
345102
345120
345201
345210
350124
350142
350214
350241
350412
350421
351024
351042
351204
351240
351402
351420
352014
352041
352104
352140
352401
352410
354012
354021
354102
354120
354201
354210
401235
401253
401325
401352
401523
401532
402135
402153
402315
402351
402513
402531
403125
403152
403215
403251
403512
403521
405123
405132
405213
405231
405312
405321
410235
410253
410325
410352
410523
410532
412035
412053
412305
412350
412503
412530
413025
413052
413205
413250
413502
413520
415023
415032
415203
415230
415302
415320
420135
420153
420315
420351
420513
420531
421035
421053
421305
421350
421503
421530
423015
423051
423105
423150
423501
423510
425013
425031
425103
425130
425301
425310
430125
430152
430215
430251
430512
430521
431025
431052
431205
431250
431502
431520
432015
432051
432105
432150
432501
432510
435012
435021
435102
435120
435201
435210
450123
450132
450213
450231
450312
450321
451023
451032
451203
451230
451302
451320
452013
452031
452103
452130
452301
452310
453012
453021
453102
453120
453201
453210
501234
501243
501324
501342
501423
501432
502134
502143
502314
502341
502413
502431
503124
503142
503214
503241
503412
503421
504123
504132
504213
504231
504312
504321
510234
510243
510324
510342
510423
510432
512034
512043
512304
512340
512403
512430
513024
513042
513204
513240
513402
513420
514023
514032
514203
514230
514302
514320
520134
520143
520314
520341
520413
520431
521034
521043
521304
521340
521403
521430
523014
523041
523104
523140
523401
523410
524013
524031
524103
524130
524301
524310
530124
530142
530214
530241
530412
530421
531024
531042
531204
531240
531402
531420
532014
532041
532104
532140
532401
532410
534012
534021
534102
534120
534201
534210
540123
540132
540213
540231
540312
540321
541023
541032
541203
541230
541302
541320
542013
542031
542103
542130
542301
542310
543012
543021
543102
543120
543201
543210

诸如排序排列之类的约束可以与if一起放置。例如:

from itertools import permutations

nums = [0, 1, 2, 3, 4, 5]
length = len(nums )

for k in range(1, length + 1):
    for perm in permutations(nums, k):
        # conditionally print a permutation
        if list(perm) == sorted(perm):
            print("".join(map(str, perm)))

在这里,我们说排列是可以打印,如果它是排序。所以012014一样好,但不是203等等。我使用sorted,因为它返回list,所以我也将perm(即元组)转换为一个列表进行比较。顺便说一句,我认为sorted是可读的,但更快的方法是写

if all(perm[i] < perm[i+1] for i in range(k-1)):。这将一次连续检查两个元素,如果它们彼此小于,则一直检查到最后

这给了我们

0
1
2
3
4
5
01
02
03
04
05
12
13
14
15
23
24
25
34
35
45
012
013
014
015
023
024
025
034
035
045
123
124
125
134
135
145
234
235
245
345
0123
0124
0125
0134
0135
0145
0234
0235
0245
0345
1234
1235
1245
1345
2345
01234
01235
01245
01345
02345
12345
012345

似乎您希望获得递增的置换量,您可以使用^{}来实现此目的:

from itertools import permutations
from pprint import pprint

data = range(6)

def inc_perms(it):
    for i, _ in enumerate(data):
        yield from permutations(data,  i)

pprint(list(inc_perms(data)))

[(0,),
 (0, 1),
 (1, 0),
 (0, 1, 2),
 (0, 2, 1),
 (1, 0, 2),
 (1, 2, 0),
 (2, 0, 1),
 (2, 1, 0),
 (0, 1, 2, 3),
 (0, 1, 3, 2),
 (0, 2, 1, 3),
 (0, 2, 3, 1),
 (0, 3, 1, 2),
 (0, 3, 2, 1),
 (1, 0, 2, 3),
 (1, 0, 3, 2),
 (1, 2, 0, 3),
 (1, 2, 3, 0),
 (1, 3, 0, 2),
 (1, 3, 2, 0),
 (2, 0, 1, 3),
 (2, 0, 3, 1),
 (2, 1, 0, 3),
 (2, 1, 3, 0),
 (2, 3, 0, 1),
 (2, 3, 1, 0),
 (3, 0, 1, 2),
 (3, 0, 2, 1),
 (3, 1, 0, 2),
 (3, 1, 2, 0),
 (3, 2, 0, 1),
 (3, 2, 1, 0),
 (0, 1, 2, 3, 4),
 (0, 1, 2, 4, 3),
 (0, 1, 3, 2, 4),
 (0, 1, 3, 4, 2),
 (0, 1, 4, 2, 3),
 (0, 1, 4, 3, 2),
 (0, 2, 1, 3, 4),
 (0, 2, 1, 4, 3),
 (0, 2, 3, 1, 4),
 (0, 2, 3, 4, 1),
 (0, 2, 4, 1, 3),
 (0, 2, 4, 3, 1),
 (0, 3, 1, 2, 4),
 (0, 3, 1, 4, 2),
 (0, 3, 2, 1, 4),
 (0, 3, 2, 4, 1),
 (0, 3, 4, 1, 2),
 (0, 3, 4, 2, 1),
 (0, 4, 1, 2, 3),
 (0, 4, 1, 3, 2),
 (0, 4, 2, 1, 3),
 (0, 4, 2, 3, 1),
 (0, 4, 3, 1, 2),
 (0, 4, 3, 2, 1),
 (1, 0, 2, 3, 4),
 (1, 0, 2, 4, 3),
 (1, 0, 3, 2, 4),
 (1, 0, 3, 4, 2),
 (1, 0, 4, 2, 3),
 (1, 0, 4, 3, 2),
 (1, 2, 0, 3, 4),
 (1, 2, 0, 4, 3),
 (1, 2, 3, 0, 4),
 (1, 2, 3, 4, 0),
 (1, 2, 4, 0, 3),
 (1, 2, 4, 3, 0),
 (1, 3, 0, 2, 4),
 (1, 3, 0, 4, 2),
 (1, 3, 2, 0, 4),
 (1, 3, 2, 4, 0), ...

相关问题 更多 >

    热门问题