例如,alpha和comp是我们正在使用的两个字符串:
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
numhelp 12345678901234567890123456
comp = "this is an example"
如何将comp
与alpha
进行比较,以便获得一个新列表index = []
,其中包含每个字母在字符串中的位置的数字或索引。
因此comp的索引看起来像[20, 8, 9, 19....]
忽略空格
然后我可以在另一个字母列表中使用这些索引吗?
key = "XPMGTDHLYONZBWEARKJUFSCIQV"
numhlp 12345678901234567890123456
所以最终字符串如下:ULYJ....
然后我们需要做的就是从空间位置列表中添加空格,我相信我可以创建它。
很抱歉,如果解释得不好,希望大家都明白。并提前感谢您的帮助。
答案 0 :(得分:3)
字符串模块具有完全相同的有用功能。
import string
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "XPMGTDHLYONZBWEARKJUFSCIQV"
comp = "this is an example"
tr = string.maketrans(alpha, key)
print string.translate(comp.upper(), tr)
# -> ULYJ YJ XW TIXBAZT
答案 1 :(得分:1)
In [8]: alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
In [9]: comp = "this is an example"
In [10]: [1+alpha.find(letter.upper()) for letter in comp if letter != ' ']
Out[10]: [20, 8, 9, 19, 9, 19, 1, 14, 5, 24, 1, 13, 16, 12, 5]
和
In [18]: indices = [1+alpha.find(letter.upper()) for letter in comp if letter != ' ']
In [19]: key = "XPMGTDHLYONZBWEARKJUFSCIQV"
In [20]: ''.join(key[i-1] for i in indices)
Out[20]: 'ULYJYJXWTIXBAZT'
对于字符串和列表以及其他可逐项化的对象,Python使用索引原点为零。
python的约定是索引原点为零。在问题中,numhlp
的索引来源为1。这就是1+
和-1
出现在上面的公式中的原因。下一节将说明这一点。
如果目标是获取加密表单,则很容易直接进入。如果我们在alpha和key的开头添加一个空格,我们甚至可以轻松地将空格包含为空格:
In [33]: key = " XPMGTDHLYONZBWEARKJUFSCIQV"
In [34]: alpha = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
In [35]: ''.join(key[alpha.find(letter.upper())] for letter in comp)
Out[35]: 'ULYJ YJ XW TIXBAZT'
答案 2 :(得分:1)
看起来你只想做一个替换密码(http://en.wikipedia.org/wiki/Substitution_cipher)。如果这是您正在做的事情,那么找到索引可能比您真正需要的更复杂。如何只是创建一个字母到一个字母的映射。然后,您可以运行字符串中的每个字母以通过查找进行编码。如果找不到,你甚至可以放入一个空间。
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "XPMGTDHLYONZBWEARKJUFSCIQV"
comp = "this is an example"
translate = dict(zip(alpha, key)) #dictionary to translate from alpha to key
encoded = [translate.get(c.upper(), " ") for c in comp] # use the get to turn anything not matched into a space
print ''.join(encoded)
>>>ULYJ YJ XW TIXBAZT
答案 3 :(得分:1)
使用dict获取索引和密钥转换:
comp ="这是一个例子"
key = "XPMGTDHLYONZBWEARKJUFSCIQV' '"
key_dict = {k:v for k,v in enumerate(key,1)}
index_dict = {k:v for v,k in enumerate("ABCDEFGHIJKLMNOPQRSTUVWXYZ' '",1)}
comp_ind = [index_dict[ch.upper()] for ch in comp if ch.upper() in index_dict]
print("".join(key_dict[k] for k in comp_ind))
ULYJ YJ XW TIXBAZT