#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)
Комментариев нет:
Отправить комментарий