首页 > 解决方案 > 是否有更有效的方法来创建映射到按集合整数移动的字母的字母字典?

问题描述

我编写了一个函数,它接受一个整数并返回一个字典,其中字母表的字母映射到一个按整数移位的字母表。它要求小写和大写字母必须对应,即如果 a -> b 则 A-> B。

我对python相当陌生,并且在创建列表方面几乎没有经验,所以我只是想知道是否有另一种更有效甚至更优雅的方式来完成相同的结果。

import string

dictionary = []

for letter in string.ascii_lowercase + string.ascii_uppercase:
    dictionary.append(letter)
    
   

def build_shift(shift):
    
    shifted_dictionary = []
    
    for i in range(0,26):
        shifted_dictionary.append(dictionary[(i + shift) % 26])
        
    for i in range(26, 53):
        shifted_dictionary.append(dictionary[(( i + shift) % 26) + 26])
        
    return (shifted_dictionary)    
 
    
mapped_dictionary = dict( zip(dictionary, build_shift(2)))  

print(mapped_dictionary)

标签: pythonperformancedictionarycoding-efficiency

解决方案


您可以使用 dict 理解在每个小写和大写字符串上迭代字符以输出映射到当前索引处的字符加上偏移量并以 26 的模数减少的字符。下面是使用 2 作为偏移量的示例:

{
    c: s[(i + 2) % 26]
    for s in (string.ascii_lowercase, string.ascii_uppercase)
    for i, c in enumerate(s)
}

推荐阅读