Python Effizientere Permutation
Dan7nm
Ich habe eine Zeichenfolge, die aus x Menge des Buchstabens 'r' und y Menge von 'u' besteht. Und mein Ziel ist es, alle möglichen Kombinationen derselben Menge x,y mit unterschiedlichen Reihenfolgen zu drucken. Dies ist mein Beispiel für einen funktionierenden Code.
import itertools
RIGHT = 'r'
UP = 'u'
def up_and_right(n, k, lst):
case = RIGHT*n + UP*k
return [''.join(p) for p in set(itertools.permutations(case))]
Beispiel Ein- und Ausgabe:
input:
lst1 = []
up_and_right(2,2,lst1)
lst1 => output:['ruru', 'urur', 'rruu', 'uurr', 'urru', 'ruur']
Mein Problem ist, wenn die Eingabe eine ganze Zahl größer als 10 ist, dauert die Berechnung des Codes eine Minute. Wie kann ich die Rechenzeit verbessern? Danke im Voraus!
Andrej Kesely
Versuch itertools.combinations
:
import itertools
RIGHT = "r"
UP = "u"
def up_and_right(n, k):
out = []
for right_idxs in itertools.combinations(range(n + k), r=n):
s = ""
for idx in range(n + k):
if idx in right_idxs:
s += RIGHT
else:
s += UP
out.append(s)
return out
print(up_and_right(2, 2))
Drucke:
['rruu', 'ruru', 'ruur', 'urru', 'urur', 'uurr']
Mit Einzeiler:
def up_and_right(n, k):
return [
"".join(RIGHT if idx in right_idxs else UP for idx in range(n + k))
for right_idxs in itertools.combinations(range(n + k), r=n)
]