Una lista ricorsiva è rappresentata da una catena di coppie. Il primo elemento di ogni coppia è un elemento nella lista, mentre il secondo è una coppia che rappresenta il resto della lista. Il secondo elemento della coppia finale è Nessuno, che indica che l'elenco è terminato. Possiamo costruire questa struttura usando un tuple letterale annidato. Esempio:Conversione tupla e lista ricorsiva
(1, (2, (3, (4, None))))
Finora, ho creato un metodo che converte una tupla di valori o il valore None in una rlist corrispondente. Il metodo è chiamato to_rlist (items). Esempio:
>>> to_rlist((1, (0, 2),(), 3))
(1, ((0, (2, None)), (None, (3, None))))
Come faccio a scrivere l'inverso di to_rlist, una funzione che prende un rlist come input e restituisce la relativa tupla? Il metodo dovrebbe essere chiamato to_tuple (parametro). Esempio di cosa dovrebbe accadere:
>>> x = to_rlist((1, (0, 2),(), 3))
>>> to_tuple(x)
(1, (0, 2),(), 3)
Nota: il metodo to_rlist funziona come previsto.
Questo è quello che ho finora:
def to_tuple(L):
if not could_be_rlist(L):
return (L,)
x, y = L
if not x is None and not type(x) is tuple and y is None:
return (x,)
elif x is None and not y is None:
return ((),) + to_tuple(y)
elif not x is None and not y is None:
return to_tuple(x) + to_tuple(y)
che mi dà il seguente risultato (che non è corretto):
>>> x = to_rlist((1, (0, 2),(), 3))
>>> to_tuple(x)
(1, 0, 2,(), 3)
Come posso risolvere il mio metodo per restituire una tupla nidificato correttamente ?
un elenco ricorsivo è uno che contiene un riferimento a se stessa. – wim
@wim Potrebbe anche significare "un tipo di lista definito in termini di se stesso" nel qual caso sarebbe adatto. (Probabilmente è anche il termine utilizzato dall'assegnazione, un'altra ragione per cui può rimanere.) – millimoose
@ user1140118: Stack Overflow non è un sito "fai (parti di) i miei compiti per me". Dovresti iniziare da solo sulla funzione e pubblicare domande su * specifici * problemi che stai riscontrando. – millimoose