Lista rekurencyjna jest reprezentowana przez łańcuch par. Pierwszym elementem każdej pary jest element na liście, podczas gdy drugi jest parą reprezentującą resztę listy. Drugim elementem ostatniej pary jest Brak, co oznacza, że lista się zakończyła. Możemy skonstruować tę strukturę za pomocą zagnieżdżonej literału. Przykład:Konwersja listy krotkowej i rekurencyjnej
(1 (2, (3 (4 Brak))))
Dotychczas Utworzona sposób, że przekształca krotka wartości lub wartość Brak w odpowiadającym rlist. Metoda nazywa się to_rlist (items). Przykład:
>>> to_rlist((1, (0, 2),(), 3))
(1, ((0, (2, None)), (None, (3, None))))
Jak napisać odwrotność to_rlist, funkcję, która pobiera rlist jako wejście i zwraca odpowiedni krotki? Metodę należy nazwać to_tuple (parametr). Przykład tego, co powinno się stać:
>>> x = to_rlist((1, (0, 2),(), 3))
>>> to_tuple(x)
(1, (0, 2),(), 3)
Uwaga: Metoda to_rlist działa zgodnie z przeznaczeniem.
To, co mam tak daleko:
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)
Który daje mi następujący wynik (co jest błędna):
>>> x = to_rlist((1, (0, 2),(), 3))
>>> to_tuple(x)
(1, 0, 2,(), 3)
Jak mogę naprawić mój sposób, aby powrócić zagnieżdżonych krotki prawidłowo ?
rekurencyjna lista jest taki, który zawiera odniesienie do samego siebie. – wim
@wim Może to również oznaczać "typ listy zdefiniowany sam w sobie", w którym to przypadku zmieści się. (Jest to również prawdopodobnie termin, którego używa zadanie, kolejny powód, dla którego może pozostać.) – millimoose
@ user1140118: Stack Overflow nie jest stroną "do (części) mojej pracy domowej". Powinieneś zacząć korzystać z tej funkcji i zadawać pytania dotyczące * określonych * problemów, które masz. – millimoose