@blutigeranfaenger: Du hast in Deiner Funktion einen rekursiven Aufruf der ja auch wieder Zeichenketten erstellt und zurück gibt. Mit diesem Rückgabewert machst Du aber nichts. Wenn die übergeordnete Funktion damit was machen soll, müsste da halt Code stehen der mit dem Rückgabewert was macht.
Wobei der rekursive Aufruf an sich hier schon fragwürdig ist IMHO, denn der ersetzt im Grunde ja nur eine normale Schleife, also sollte man das auch einfach als normale Schleife schreiben. Anderseits möchtest Du vielleicht auch eine Lösung haben die tatsächlich rekursiv ist und mehr Teilzeichenketten produziert‽
Ausgehend vom Code von Sirius3 kann man *das* jedenfalls problemlos ohne Rekursion lösen:
Code: Alles auswählen
#!/usr/bin/env python3
from itertools import combinations
from pprint import pprint
def create_substrings(string, substring_length=None):
if substring_length is None:
substring_length = len(string) - 1
result = []
for length in reversed(range(2, substring_length + 1)):
result.append(
[
"".join(combination)
for combination in combinations(string, length)
]
)
string = result[-1][-1]
return result
def main():
pprint(create_substrings("Lösung"))
if __name__ == "__main__":
main()
(Falls man diese Funktion eigentlich immer ohne zweites Argument aufruft, dann sollte das zweite Argument weg.)
Ausgabe:
Code: Alles auswählen
[['Lösun', 'Lösug', 'Lösng', 'Löung', 'Lsung', 'ösung'],
['ösun', 'ösug', 'ösng', 'öung', 'sung'],
['sun', 'sug', 'sng', 'ung'],
['un', 'ug', 'ng']]
Wobei man sich bei Verwendung von `itertools` natürlich auch überlegen kann, und vielleicht auch sollte, ob man da wirklich eine potentiell riesige Liste zurückgeben sollte, oder nicht vielleicht selbst einen Iterator von Iteratoren, oder mindestens einen Iterator von Listen. Wenn der Aufrufer das unbedingt alles auf einmal in einer Liste haben möchte, kann der das dann ja immer noch alles auf einmal im Speicher ansammeln.
Wie ist das eigentlich mit mehrfach vorkommenden Teilzeichenketten? Bei "Lösung" taucht so etwas nicht auf, aber bei "Missisippi":
Code: Alles auswählen
[['Missisipp',
'Missisipi',
'Missisipi',
'Missisppi',
'Missiippi',
'Misssippi',
'Misisippi',
'Misisippi',
'Mssisippi',
'issisippi'],
['issisipp',
'issisipi',
'issisipi',
'issisppi',
'issiippi',
'isssippi',
'isisippi',
'isisippi',
'ssisippi'],
['ssisipp',
'ssisipi',
'ssisipi',
'ssisppi',
'ssiippi',
'sssippi',
'sisippi',
'sisippi'],
['sisipp', 'sisipi', 'sisipi', 'sisppi', 'siippi', 'ssippi', 'isippi'],
['isipp', 'isipi', 'isipi', 'isppi', 'iippi', 'sippi'],
['sipp', 'sipi', 'sipi', 'sppi', 'ippi'],
['ipp', 'ipi', 'ipi', 'ppi'],
['pp', 'pi', 'pi']]