Перемещаться вручную с помощью курсора по вложенным спискам, предоставляя только «left ()» и «right ( ) ”В виде команд?

Несмотря на то, что я пишу на python, я думаю, что абстрактная концепция более интересна мне и другим. Так что псевдокод, пожалуйста, если вам нравится :)

У меня есть список с элементами из одного из моих классов. Давайте сделаем это со строками и числами, это действительно не имеет значения. Вложен на любую глубину. (На самом деле это не список, а контейнерный класс, основанный на списке.)

Пример : [1, 2, 3, ['a', 'b', 'c'] 4 ['d', 'e', ​​[100, 200, 300]] 5, ['a', 'b ',' c '], 6]

Обратите внимание, что оба [' a ',' b ',' c '] на самом деле являются одним и тем же контейнером. Если вы меняете одно, вы меняете другое. Контейнеры и элементы можно редактировать, элементы вставлять, а наиболее важные контейнеры можно использовать несколько раз. Чтобы избежать избыточности, невозможно сгладить список (я думаю!), Потому что вы теряете возможность вставлять элементы в один контейнер, и он автоматически появляется во всех других контейнерах.

Проблема: Для внешнего интерфейса (просто командная строка с модулем python "cmd") Я хочу перемещаться по этой структуре с помощью курсора, который всегда указывает на текущий элемент, чтобы его можно было прочитать или отредактировать. Курсор может перемещаться влево и вправо (с точки зрения пользователя) и должен вести себя так, как если бы список был не вложенным, а плоским.

Для человека это очень легко сделать. Вы просто делаете вид, что в этом списке выше подсписок не существует, и просто переходите слева направо и обратно.

Например, если вы находитесь на позиции «3» в списке выше и идете вправо, вы получаете 'a 'следующим элементом, затем' b ',' c ', а затем "4" и т. д. Или, если вы пойдете направо от «300», вы получите следующую цифру «5».

И наоборот: Если вы пойдете налево от «6», следующая будет «c». Если вы пойдете налево от «5», будет «300».

Как мне это сделать в принципе? У меня есть один подход, но он неверен, и вопрос уже настолько длинный, что я боюсь, что большинство людей его не прочитают :(. Я могу опубликовать его позже.

P.S. Даже если противостоять этому трудно: ответ на этот вопрос не таков: «Почему вы хотите это сделать, почему вы организовываете свои данные таким образом, почему бы вам сначала не [свести список | что-то из моего воображения]? Проблема именно в том, что я описал здесь, и больше ни в чем. Данные структурированы таким образом в зависимости от характера проблемы.

5
задан nilshi 1 July 2011 в 14:03
поделиться