如何找到字符串的字母与另一个字母的匹配?

时间:2014-10-17 23:23:15

标签: python string python-3.x

例如,alpha和comp是我们正在使用的两个字符串:

alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
numhelp  12345678901234567890123456
comp = "this is an example"

如何将compalpha进行比较,以便获得一个新列表index = [],其中包含每个字母在字符串中的位置的数字或索引。

因此comp的索引看起来像[20, 8, 9, 19....]忽略空格

然后我可以在另一个字母列表中使用这些索引吗?

key = "XPMGTDHLYONZBWEARKJUFSCIQV"
numhlp 12345678901234567890123456

所以最终字符串如下:ULYJ....

然后我们需要做的就是从空间位置列表中添加空格,我相信我可以创建它。

很抱歉,如果解释得不好,希望大家都明白。并提前感谢您的帮助。

4 个答案:

答案 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