需要更好的逻辑来将字符串的每个第 i 个字符与其反向字符串的每个第 i 个字符相加

Need better logic to add Every ith character of string with every ith character of its reverse string

我是python编码和以某种硬编码方式构建一些基本逻辑的新手。

问题陈述简单易行。

假设我有词:hello,它的反义词是olleh

将每个第 i 个字符的值相加,即 h = 8 和 o = 15 将为 23 并返回转换为字符串,即 23 = w(对于 a = 1,b=2,依此类推)

最终输出将是:wqxqw

我有以下代码:

given = list(raw_input())

# forward & reversing the list
forward_str = given
reverse_str = given[::-1]

# converting letters(a-z) to number(1-26) 
forward_nums = []
for f in forward_str:
    forward_nums.append(ord(f) - ord('a') + 1)

reverse_nums = []
for r in reverse_str:
    reverse_nums.append(ord(r) - ord('a') + 1)


# Addtion of element-wise from both lists

# from operator import add
# map(add, list1, list2)

addition = [sum(x) for x in (zip(forward_nums,reverse_nums))]


# For letters a-z ,numbers should be in range 1-26,so i > 26 is added back
valid_nums = []
for i in addition:
    if i <= 26:
        valid_nums.append(i)
    elif i > 26:
        x = i %26
        valid_nums.append(x)  


# converting number(1-26) to letters(a-z)
import string
num2alpha = dict(zip(range(1, 27), string.ascii_lowercase))

chars =[]
for i in valid_nums:
    chars.append(num2alpha[i])

#converting list to string
output = "".join(chars)


print "forward_str : ",forward_str
print "reverse_str : ",reverse_str,"\n -----------------------------------------"
print "forward_nums : ",forward_nums
print "reverse_nums : ",reverse_nums,"\n----------------------------------------"
print "additon : ",addition
print "valid_nums : ",valid_nums,"\n---------------------------------------------"
print "converted_list : ",chars 
print "final output : ",output

对于输入:helloworld

输出为:

forward_str :  ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
reverse_str :  ['d', 'l', 'r', 'o', 'w', 'o', 'l', 'l', 'e', 'h'] 
 -----------------------------------------
forward_nums :  [8, 5, 12, 12, 15, 23, 15, 18, 12, 4]
reverse_nums :  [4, 12, 18, 15, 23, 15, 12, 12, 5, 8] 
----------------------------------------
additon :  [12, 17, 30, 27, 38, 38, 27, 30, 17, 12]
valid_nums :  [12, 17, 4, 1, 12, 12, 1, 4, 17, 12] 
---------------------------------------------
converted_list :  ['l', 'q', 'd', 'a', 'l', 'l', 'a', 'd', 'q', 'l']
final output :  lqdalladql

考虑给定的字符串是小写的。

我正在为此寻找更简单、更 pythonic 的解决方案。

提前致谢

使用列表理解简化为以下内容

import string
given = list(raw_input())

# forward & reversing the list
forward_str = given
reverse_str = given[::-1]

forward_nums = [ord(i)-ord('a')+1 for i in forward_str]
reverse_nums = [ord(i)-ord('a')+1 for i in reverse_str]

addition = [sum(x) for x in (zip(forward_nums,reverse_nums))]
valid_nums = [i % 26 for i in addition]

chars = [string.ascii_lowercase[i-1] for i in valid_nums]
output = ''.join(chars)

如果不需要中间结果可以进一步简化为下面

import string
given = list(raw_input())

valid_nums = [ (ord(i)+ord(j)-ord('a')-ord('a')+2) % 26 for i,j in zip(given,given[::-1]) ]
output = ''.join([string.ascii_lowercase[i-1] for i in valid_nums])

from string import ascii_lowercase as al
given = list(raw_input())

valid_nums = [ (al.index(i) + al.index(j)+2) % 26 for i,j in zip(given,given[::-1]) ]
output = ''.join([al[i-1] for i in valid_nums])