Рекурсивный список представлен цепью пар. Первый элемент каждой пары - это элемент в списке, а второй - пара, которая представляет остальную часть списка. Второй элемент последней пары - None, что указывает на то, что список закончился. Мы можем построить эту структуру, используя вложенный кортеж. Пример:Конвертация точечного и рекурсивного списка
(1, (2, (3, (4, Отсутствует))))
До сих пор я создал метод, который преобразует кортеж значений или значение None в соответствующий rlist. Метод вызывается to_rlist (items). Пример:
>>> to_rlist((1, (0, 2),(), 3))
(1, ((0, (2, None)), (None, (3, None))))
Как написать обратное to_rlist, функцию, которая принимает в качестве входных данных Rlist и возвращает соответствующий кортеж? Метод должен быть вызван to_tuple (параметр). Пример того, что должно произойти:
>>> x = to_rlist((1, (0, 2),(), 3))
>>> to_tuple(x)
(1, (0, 2),(), 3)
Примечание: Метод to_rlist работает по назначению.
Это то, что я до сих пор:
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)
Который дает мне следующий результат (что неверно):
>>> x = to_rlist((1, (0, 2),(), 3))
>>> to_tuple(x)
(1, 0, 2,(), 3)
Как я могу исправить мой метод, чтобы вернуть вложенный кортеж правильно ?
Рекурсивный список один, который содержит ссылку на себя. – wim
@wim Это также может означать «тип списка, определенный в терминах самого себя», и в этом случае он будет соответствовать. (Это также, вероятно, термин, используемый назначением, другая причина, по которой он может остаться.) – millimoose
@ user1140118: Stack Overflow не является «участником моей домашней работы для меня». Вы должны начать работу над функцией самостоятельно и задавать вопросы о * конкретных * проблемах, которые у вас есть. – millimoose