Python列表-更改字符并保持相同顺序

时间:2018-10-05 19:17:33

标签: python-3.x

我将使用字母进行加密,我可以使用列表进行更改吗?

  

abc = abcdefghijklmnopqrstuvxyz

我需要使用以下职位: a = 1 b = 2 c = 3 d = 4 ...

  

a = [1、2、3、4、5、6、7、8、9、10 ...]

我将使用函数更改位置,更改值,这将给我类似于以下结果:

  

b = [4,23,22,11,7,8 ...]

然后字母将转到第一个字母的位置 a = 1至4、4 = d,23 = w,22 = v ...

  

abc_2 = dwvhk ...

我打算使用它

from gi.module import maketrans

abc = 'abcdefghijklmnopqrstuvwxyz'

abc_2 = 'dwvhkghevbwtrcmywqazxpolk'

encript = maketrans(abc,abc_2)

s = input('enter the phrase')
print (s.translate(encript))

3 个答案:

答案 0 :(得分:0)

您可以遍历b并将char放在位置abc处以构造abc_2,如下所示:

abc = 'abcdefghijklmnopqrstuvxyz'
abc_2 = ''
new_index = [4, 23, 22, 11, 7, 8]

for x in range(len(new_index)):
    abc_2 += abc[new_index[x]]

print(abc_2)

答案 1 :(得分:0)

这应该有效:

def maketrans(abc, abc_2):
  if len(abc) != len(abc_2):
    raise ValueError('strings should be the same length')
  trans = []
  for i in range(len(abc)):
    trans.append(ord(abc_2[i])-ord(abc[i]))
  return trans

def translate(s, encrypt):
  t = ""
  for i in range(len(s)):
    t += chr(ord(s[i])+encrypt[ord(s[i])-ord('a')])
  return t

此外,abc_2缺少一个字母,我认为它是'f'。

答案 2 :(得分:0)

这是一个版本:

# this is just to generate some permutation b
from random import shuffle
b = list(range(len(abc)))
shuffle(b)

abc = 'abcdefghijklmnopqrstuvwxyz'
abc_2 = ''.join(abc[i] for i in b)
transtable = str.maketrans(abc, abc_2)
print('hello world'.translate(transtable))

要使str.maketrans起作用,两个给定的字符串必须具有相同的长度。

您的abc_2有一些重复的字母,并且比原始字母短一个字符...