代码之家  ›  专栏  ›  技术社区  ›  hoju

使用键重新排列字符串

  •  4
  • hoju  · 技术社区  · 16 年前

    使用我想要的python 随机 根据给定的键重新排列字符串的节。我还想用相同的键还原原始字符串:

    def rearrange(key, data):
        pass
    
    def restore(key, rearranged_data):
        pass
    

    效率并不重要。有什么想法吗?

    编辑:

    3 回复  |  直到 16 年前
        1
  •  3
  •   ghostdog74    16 年前

    你可以重新发明轮子,但为什么不试试 encryption library 首先,如果可能的话。

        2
  •  4
  •   Mark Byers    16 年前

    使用 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
  •  1
  •   sth    16 年前

    一种实现,它用 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)
    
    推荐文章