我有一个编码文本文件,通过简单的字母移位编码。我现在已将其中的信息分为两个列表。采用以下格式:
list_1 =['fjsir', 'vnjk', 'eioafnvjf', 'einbvfbj']
list_2 =[3,4,7,1]
第二个列表是字母表中应该移动多少个位置。例如。如果列表1中的索引0具有'fjsir'
并且它在list_2
中的对应索引是3,那么它将解码为'cfpeo'
。我不确定如何在python中匹配这些。
答案 0 :(得分:2)
将元素移到左侧:
chr(ord(char) - n)
使用ord()
获取char
的整数表示,并从此数字中减去n
。然后使用chr()
将其转换回字符。
该功能可能如下所示:
def shift(s, n):
return ''.join(chr(ord(char) - n) for char in s)
使用zip()
可以很好地调用哪个:
list_1 =['fjsir', 'vnjk', 'eioafnvjf', 'einbvfbj']
list_2 =[3,4,7,1]
for x, y in zip(list_1, list_2):
print(shift(x, y))
并给出了解码:
cgpfo
rjfg
^bhZ_goc_
dhmaueai
此外,如果您只希望解码只包含英文字母中的字母,则可以使用模数函数%
代替:
def shift(s, n):
return ''.join(chr((ord(char) - 97 - n) % 26 + 97) for char in s)
只返回字母的解码:
cgpfo
rjfg
xbhtygocy
dhmaueai
答案 1 :(得分:2)
这是一个简单的解决方案:
alphabets = 'abcdefghijklmnopqrstuvwxyz'
list_1 = ['fjsir', 'vnjk', 'eioafnvjf', 'einbvfbj']
list_2 = [3,4,7,1]
final_list = []
for index,original_word in enumerate(list_1):
new_word = ''
for letter in original_word:
if letter in alphabets:
index_val = alphabets.index(letter) - list_2[index]
new_word += alphabets[index_val]
final_list.append(new_word)
print final_list
输出: [' cgpfo',' rjfg',' xbhtygocy',' dhmaueai']
答案 2 :(得分:1)
您可以使用ord()
将字符转换为数字,并将数字转换为chr()
的字符。移位功能可能如下所示:
def shift_string(inString, inOffset):
return "".join([chr(ord(x) + inOffset) for x in inString])
从列表中访问数组元素留给读者。 ;)
注意:这个简单的版本可能会产生不需要的字符。您可以简单地使用模数函数来保持ASCII范围。
def shift_string(inString, inOffset):
return "".join([chr(((ord(x) - ord(' ') + inOffset) % 95) + ord(' ')) for x in inString])
如果您的有效字符集更复杂(例如字母),您应该为字符转换编写一个特殊函数。