Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Прямая и обратная перестановка символов в строке по таблице замены

#python


Есть таблица перестановок символов в строке (символов восемь). table = [6, 8, 2,
4, 3, 7, 5, 1]. И текст text = 'qwertyui', перестановку делаю таким способом: perm
= ''.join(text[x - 1] for x in table) и получаю выходную строку yiwreutq, т.е первый
символ из строки text, становится шестым, второй - восьмым и т.д, т.е. из строки qwertyui
получается строка yiwreutq.

Но вот с обратной перестановкой возникли сложности, придумал только такой вариант:
txt = ''.join([i for sub in sorted(zip(perm, table), key=lambda t: t[1]) for i in sub[0]]),
хотя кажется, что есть вариант намного проще.  Как можно еще реализовать обратную перестановку,
т.е. чтобы из yiwreutq снова получить qwertyui?

Спасибо.
    


Ответы

Ответ 1



''.join([new_str[table.index(i+1)] for i in range(len(table))])

Ответ 2



Попробуйте использовать таблицу соостветствия: In [90]: tab = list(zip(map(lambda x: x-1, table), range(len(table)))) In [91]: tab Out[91]: [(5, 0), (7, 1), (1, 2), (3, 3), (2, 4), (6, 5), (4, 6), (0, 7)] In [92]: back = ''.join(perm[b] for _,b in sorted(tab)) In [93]: back Out[93]: 'qwertyui'

Ответ 3



txt = table[:] for k,i in enumerate(table): txt[i-1]=text[k] txt = ''.join(txt)

Комментариев нет:

Отправить комментарий