Преобразовать введенную в input () строку обратно в двумерную матрицу - PullRequest
0 голосов
/ 22 марта 2019

В программе на Python, которую я пишу на CodeSkupltor3, данные хранятся в виде одного числа в списке списков (двумерная матрица). Поскольку CodeSkulptor не может сохранять файлы, я добавил опцию для пользователя, чтобы экспортировать данные. Распечатывается для копирования пользователем в буфер обмена.

Вот пример того, как может выглядеть матрица:

[[0, 3, 4, 3, 2], [1, 2, 1, 2, 3], [3, 3, 3, 1, 2], [3, 4, 0, 3, 2 ], [2, 2, 2, 1, 0]]

Однако количество списков в основном списке может варьироваться, как и число целых чисел в подсписках.

Пользователь должен иметь возможность вставлять данные обратно в программу по запросу оператора input(). Поскольку все данные, передаваемые в оператор ввода, представлены в строковом формате, их необходимо преобразовать обратно в матрицу для использования.

CodeSkulptor не имеет num.py или eval(). Я пытался использовать различные комбинации string.split(), но ни одна из них, которые я пробовал, не разбивает их правильно. Я также попытался использовать list(), но в результате каждый символ в строке становится элементом в списке:

['[', '[', '0', ',', '', '3', ',', '', '4', ',', '', '3', ' , ',' ',' 2 ','] ',', ',' ',' [',' 1 ',', ',' ',' 2 ',', ',' ',' 1 ' , ',', '', '2', ',', '', '3', ']', ',', '', '[', '3', ',', '', ' 3 ',', ',' ',' 3 ',', ',' ',' 1 ',', ',' ',' 2 ','] ',', ',' ',' [' , '3', ',', '', '4', ',', '', '0', ',', '', '3', ',', '', '2', ' ] ',', ',' ',' [',' 2 ',', ',' ',' 2 ',', ',' ',' 2 ',', ',' ',' 1 ' , ',', '', '0', ']', ']'

Как превратить строку обратно в матрицу?

1 Ответ

1 голос
/ 22 марта 2019

Вот решение:

a = '[[0, 3, 4, 3, 2], [1, 2, 1, 2, 3], [3, 3, 3, 1, 2], [3, 4, 0, 3, 2], [2, 2, 2, 1, 0]]'

lst_lst = []
for i in a[:-1].replace('[', '').split(']'):
    lst = []
    for carac in i:
        if carac not in [',', ' ']:
            lst.append(int(carac))
    lst_lst.append(lst)
lst_lst
-> [[0, 3, 4, 3, 2], [1, 2, 1, 2, 3], [3, 3, 3, 1, 2], [3, 4, 0, 3, 2], [2, 2, 2, 1, 0]]
...