马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 15271953841 于 2024-2-23 06:10 编辑
这节课主要学习字典的认识:
跟序列的相辅相成的结构
字典这个数据结构活跃在所有Python程序的背后,即便你的源码里没有直接用到它。——A.M.Kuchling
字典时Python中唯一实现映射关系的内置类型。
那么,映射关系又是什么呢?
例如:摩斯密码
方法一:两个列表的方式:
# 摩斯密文表
c_table = [".-","-...","-.-.","-..",".","..-.",
"--.","....","..",".---","-.-",".-..",
"--","-.","---",".--.","--.-",".-.",
"...","-","..-","...-",".--","-..-",
"-.--","--..",".----","..---","...--","....-",
".....","-....","--...","---..","----.","-----"]
# 摩斯明文表
d_table = ["A","B","C","D","E","F",
"G","H","I","J","K","L",
"M","N","O","P","Q","R",
"S","T","U","V","W","X",
"Y","Z","1","2","3","4",
"5","6","7","8","9","0"]
code = input("请输入摩斯密码:")
split_code = code.split(" ")
result = [d_table[c_table.index(each)] for each in split_code]
print(result)
上面这个列表推导式展开是这个样子的:
result = []
for each in split_code:
_= c_table.index( each)
result.append(d_dable[_])
方法二:一个列表的方式:
# 摩斯密码对比表
c_table = [".-","A","-...","B","-.-.","C","-..","D",
".","E","..-.","F","--.","G","....","H",
"..","I",".---","J","-.-","K",".-..","L",
"--","M","-.","N","---","O",".--.","P",
"--.-","Q",".-.","R","...","S","-","T",
"..-","U","...-","V",".--","W","-..-","X",
"-.--","Y","--..","Z",".----","1","..---","2",
"...--","3","....-","4",".....","5","-....","6",
"--...","7","---..","8","----.","9","-----","0"]
code = input("请输入摩斯密码: ")
split_code = code.split(" ")
result = [c_table[c_table.index(each)+1] for each in split_code]
print(result)
点击编辑模式下最上面的菜单中的”run“菜单的,再点击下拉菜单中的“run module”,于是弹出交互模式,要求输入摩斯密码:
... .... .- -. --. .... .- .. --.. .. .-.. .- .. ... .... ..- .. .-.. .- .. --.. .. .... .- .. ... .... .- -. --.
回车后,显示密码的明文汉语拼音:
['S', 'H', 'A', 'N', 'G', 'H', 'A', 'I', 'Z', 'I', 'L', 'A', 'I', 'S', 'H', 'U', 'I', 'L', 'A', 'I', 'Z', 'I', 'H', 'A', 'I', 'S', 'H', 'A', 'N', 'G']
破译:上海自来水来自海上
方法三:字典的方式:
# 摩斯密码对比表
c_table = {".-":"A","-...":"B","-.-.":"C","-..":"D",
".":"E","..-.":"F","--.":"G","....":"H",
"..":"I",".---":"J","-.-":"K",".-..":"L",
"--":"M","-.":"N","---":"O",".--.":"P",
"--.-":"Q",".-.":"R","...":"S","-":"T",
"..-":"U","...-":"V",".--":"W","-..-":"X",
"-.--":"Y","--..":"Z",".----":"1","..---":"2",
"...--":"3","....-":"4",".....":"5","-....":"6",
"--...":"7","---..":"8","----.":"9","-----":"0"}
code = input("请输入摩斯密码:")
split_code = code.split(" ")
result = [c_table[each] for each in split_code]
print(result)
字典的实现方式,虽然还没学过字典的语法{键:值,键:值,key:value},相比第二种方式的一个列表,首尾的中括号变成了大括号,每个密文元素与其对应的明文字符之间的逗号换成了冒号,前面的密文字符叫“键”,后面的明文字符叫“值”,形成一一对应的“键值对”。
字典的获取方式直截了当,列表只是用来模拟,而字典它内部就是映射关系。
所以在映射类型数据获取上,使用字典的速度要比前两种使用列表的速度快,一个列表查找索引的时间就变长了,因为要遍历元素去找匹配的值,两个列表时单个列表的元素数量少,遍历时间短。
|