使用键重新排列字符串
我想用Python随机重新排列一个字符串的部分内容,排列的方式是根据一个给定的关键字来决定的。同时,我也希望能用同样的关键字把原来的字符串恢复回来:
def rearrange(key, data):
pass
def restore(key, rearranged_data):
pass
效率不是最重要的。有什么想法吗?
编辑:
- 可以假设关键字是可哈希的,但可能有多种类型
- 对“部分”的定义给ignacio
3 个回答
1
这是一个用 sort()
方法来逆转打乱顺序的实现:
import random
def reorder_list(ls, key):
random.seed(key)
random.shuffle(ls)
def reorder(s, key):
data = list(s)
reorder_list(data, key)
return ''.join(data)
def restore(s, key):
indexes = range(len(s))
reorder_list(indexes, key)
restored = sorted(zip(indexes, list(s)))
return ''.join(c for _, c in restored)
4
使用 random.shuffle
并把关键字作为种子:
import random
def rearrange(key, data):
random.seed(key)
d = list(data)
random.shuffle(d)
return ''.join(d)
def restore(key, rearranged_data):
l = len(rearranged_data)
random.seed(key)
d = range(l)
random.shuffle(d)
s = [None] * l
for i in range(l):
s[d[i]] = rearranged_data[i]
return ''.join(s)
x = rearrange(42, 'Hello, world!')
print x
print restore(42, x)
输出结果:
oelwrd!, llHo
Hello, world!
3
你可以自己重新发明轮子,但如果可以的话,为什么不先试试一个加密库呢?