使用键重新排列字符串

4 投票
3 回答
1320 浏览
提问于 2025-04-15 19:47

我想用Python随机重新排列一个字符串的部分内容,排列的方式是根据一个给定的关键字来决定的。同时,我也希望能用同样的关键字把原来的字符串恢复回来:

def rearrange(key, data):
    pass

def restore(key, rearranged_data):
    pass

效率不是最重要的。有什么想法吗?

编辑:

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

你可以自己重新发明轮子,但如果可以的话,为什么不先试试一个加密库呢?

撰写回答