2017-06-07 5 views
-4

Ich habe eine ganze Zahl zum Beispiel "123", mit dieser ich möchte alle möglichen Kombinationen unten aufgeführt erstellen. 12,3 1,23 usw. unabhängig von den Ziffern, die ich eingegeben habe. Gibt es eine Möglichkeit mit Python für die gleiche? Ich bin nicht in der Lage, eine Idee zu bekommen.Python erstellen alle möglichen Kombinationen aus einer ganzen Zahl

+1

Haben Sie am itertools Modul geschaut und die Kombinationen/Permutationen Funktionen? –

+0

Ja itertools gibt mir eine Ausgabe wie "['123', '132', '213', '231', '312', '321']". Aber ich brauche eine Ausgabe von 123 wie (1,2,3), (12,3), (1,23) usw. –

+2

Ihre Frage ist derzeit zu vage. Ist die Reihenfolge wichtig? Sollte die Ausgabe (1,32) enthalten? Sollte es (1,2,3) und (3,1,2) enthalten? –

Antwort

0

Ich denke, das ist das, was Sie suchen:

num = 123 
s = str(num) 
[[x for x in i if x is not '' and ' '] for i in [list(s.partition(item)) for item in list(s+' ')]] 

Ausgang:

[['1', '23'], ['1', '2', '3'], ['12', '3'], ['123']] 

Sie könnten auch Tupel verwenden:

s = str(num) 
[tuple([x for x in i if x is not '' and ' ']) for i in [list(s.partition(item)) for item in list(s+' ')]] 

Ausgang:

[('1', '23'), ('1', '2', '3'), ('12', '3'), ('123',)] 
+0

Dies ist wahrscheinlich, was das OP will, aber Raten kann gefährlich sein, wenn Sie falsch raten. ;) BTW, es ist im Allgemeinen keine gute Idee, "ist" zu verwenden, um Zeichenfolgen zu prüfen, da "ist" Testidentität, nicht Wert. Es funktioniert hier, weil CPython die leere Zeichenfolge optimiert, und es wird oft mit kurzen Zeichenfolgen arbeiten, die vom Interpreter wiederverwendet werden, aber es wird nicht immer funktionieren. Siehe [Warum führt das Vergleichen von Strings in Python mit '==' oder 'is' manchmal zu einem anderen Ergebnis?] (Https://stackoverflow.com/q/1504717/4014959) für weitere Details. –

+1

BTW, 'wenn x nicht ist '' und '' 'wird interpretiert als' wenn (x ist nicht '') und '' ', und daher ist es logisch äquivalent zu' wenn x '. Die leere Zeichenfolge hat einen booleschen Wert von "False", und jede andere Zeichenfolge hat einen booleschen Wert von "True". Wenn also "x" die leere Zeichenfolge ist, wird "x" nicht zu "false" ausgewertet, so dass der "if" -Test fehlschlägt. Andernfalls wird 'x nicht '' 'zu' True' ausgewertet, der zweite Operator von 'and' (' '' ') wird zum Wert des Ausdrucks, also wird der 'if' Test bestanden. –

+0

Danke, ich habe den 'if (x ist nicht '') und '' 'Teil nicht bemerkt. Obwohl, überraschenderweise, mein Code löschte das nachlaufende und führende '''' und ''' genau so, wie ich es brauchte. – nikpod

0

Dies funktionieren würde:

import itertools 

stuff = list('123') 
for L in range(0, len(stuff)+1): 
    for subset in itertools.combinations(stuff, L): 
    print(subset) 

Ausgang:

() 
(1,) 
(2,) 
(3,) 
(1, 2) 
(1, 3) 
(2, 3) 
(1, 2, 3) 
+0

Ich möchte die Ausgabe von "123" wie (1,2,3), (12,3), (1,23) und so weiter –

+1

@srivathsakenkere Bearbeiten Sie die Frage –

Verwandte Themen