python - 是否有更有效的方法来创建映射到按集合整数移动的字母的字母字典?
问题描述
我编写了一个函数,它接受一个整数并返回一个字典,其中字母表的字母映射到一个按整数移位的字母表。它要求小写和大写字母必须对应,即如果 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)
解决方案
您可以使用 dict 理解在每个小写和大写字符串上迭代字符以输出映射到当前索引处的字符加上偏移量并以 26 的模数减少的字符。下面是使用 2 作为偏移量的示例:
{
c: s[(i + 2) % 26]
for s in (string.ascii_lowercase, string.ascii_uppercase)
for i, c in enumerate(s)
}
推荐阅读
- object - 无法使用 cmake link_directories 找到目标文件
- javascript - 当我按下回车键时如何删除 CKeditor4 段落标签?
- javascript - React Material UI CardHeader 标题溢出点
- java - 延迟初始化@ManyToMany。错误是什么?
- css - LTR 到 RTL 转换
- excel - 使用 sumif 对 InputBox 中的条件求和范围
- xamarin.forms - 开箱即用的 Xamarin Android 应用在 MainActivity 中显示未定义的 Android.Support、Android.Views、Android.Content
- postgresql - 使用保存在 Postgres 中的 QGIS 项目作为 QGIS 服务器的项目文件
- python - “errorMessage”:“时间数据 '' 与 Lambda 脚本 AWS 中的格式 '%Y-%m-%d %H:%M:%S %Z' 不匹配”
- c# - EF 6,从 DTO 更新实体,但只有现有属性(通用代码)