/ / In Python von Tupel zu verschachtelten Tupel konvertieren - Python, Algorithmus, Python-3.x, Rekursion, Datenstrukturen

Konvertieren von Tupel von Tupeln in verschachtelte Tupel in Python - Python, Algorithmus, Python-3.x, Rekursion, Datenstrukturen

Gibt es eine einfache Möglichkeit, umzuwandeln

t = ((1,), (1, 2), (1, 2, 3), (1, 2, 3, 4), (1, 2, 3, 4, 5))

auf die folgende rekursive Struktur, wobei jedes folgende Tupel als Element des vorherigen Tupels angehängt wird

(1, (1, 2, (1, 2, 3, (1, 2, 3, 4, (1, 2, 3, 4, 5)))))

Was ist die Grenze für diese Verschachtelung? Kann ich 1000 oder 10000 solcher verschachtelten Tupel haben?

AKTUALISIEREN: Es scheint t Das Verschachteln ist unbegrenzt (mit 10000 probiert, nachdem die Rekursionsgrenze auf 100 gesetzt wurde).

Unter Windows 7, Python 3.5) liegt das Rekursionslimit zunächst bei 300, kann jedoch wie folgt aufgehoben werden: (Referenz). Dies hängt nicht mit der Struktur zusammen t, kann aber mit der Python-Routine zusammenhängen, die auf verschachtelte Ebenen der resultierenden Struktur zugreift.

sys.getrecursionlimit()   # display current recursion level
sys.setrecursionlimit(10000)  # set recursion level to 1000

Antworten:

0 für die Antwort № 1

Du könntest es tun

def convert(t):
result = t[-1]
for x in t[-2::-1]:
result = x + (result,)
return result

das iteriert rückwärts durch t. Sie können wahrscheinlich ein sehr tief verschachteltes Tupel konstruieren, haben aber möglicherweise Probleme, es auszudrucken.


6 für die Antwort № 2

Verwenden functools.reduce:

>>> from functools import reduce
>>> t = ((1,), (1, 2), (1, 2, 3), (1, 2, 3, 4), (1, 2, 3, 4, 5))
>>> reduce(lambda a, b: b + (a,), reversed(t), ())
(1, (1, 2, (1, 2, 3, (1, 2, 3, 4, (1, 2, 3, 4, 5)))))

0 für die Antwort № 3

Für die verschachtelte Konstruktion:

def f(t):
res = t[-1]
for x in t[-2::-1]:
res = x + (res,)
return res

t = ((1,), (1, 2), (1, 2, 3), (1, 2, 3, 4), (1, 2, 3, 4, 5))
print f(t)

Wie groß es sein kann, weiß ich nicht, aber ich gehe davon aus, dass es von Ihrem Computer, Ihren Einstellungen usw. abhängt.