Ich habe eine Liste voller Buchstaben wie li = ["m", "i"]
und ich möchte eine Liste von Tupeln als permutierten Form zurückzukehren ohne Bibliotheken folgend zu verwenden,Wie gebe ich eine Liste von Tupeln als permutiertes Formular aus einer Liste von Buchstaben mit merge sort zurück?
[("m", "i"), ("i", "m")]
Ich versuche, mit Rekursion Mergesort zu verwenden, um Lösen Sie dieses Problem jedoch, das nicht die richtige Ausgabe zurückgibt. Mein Programm unten vorgesehen ist,
def permutation1(lis):
res = []
if len(lis) == 1:
res.append(lis)
elif len(lis) > 1:
last_index = len(lis) -1
last = lis[last_index]
rest = lis[:last_index]
if rest is not None and last is not None:
res.append(merge(permutation1(rest), last))
return res
def merge(lis, c):
res = []
for s in lis:
for i in range(len(s)+1):
ps = s[:i]+ list(c) + s[i:]
value = tuple(list(ps))
# print value
res.append(value)
return res
Zum Beispiel mit Eingang von ["m", "i", "b"]
, ich Ausgabe als [[('b', ('i', 'm'), ('m', 'i')), (('i', 'm'), 'b', ('m', 'i')), (('i', 'm'), ('m', 'i'), 'b')]]
, die nicht korrekt ist. Wie kann ich das Programm so verbessern, dass ich wie erwartet laufe?
Does [ 'itertools.permutations'] (https://docs.python.org/2.7/library/ itertools.html # itertools.permutations) hilft Ihnen alles? – Ian
@mwormser Ich möchte keine Bibliotheken verwenden. Ich versuche, richtig zu lernen, wie Rekursion und Mer-Sortierung zusammenarbeiten, indem wir dieses Problem lösen. Es hilft dir für abstraktes Denken. – Arefe
Das wäre eine gute Sache, in Ihre Frage aufzunehmen. – glibdud