鱼C论坛

 找回密码
 立即注册
查看: 1629|回复: 4

[已解决]python字符串的translate功能疑问

[复制链接]
发表于 2017-11-21 09:16:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
str11 = '133'
str11.translate(str.maketrans('133','123'))
输出:
'133'


str12 = '123'
str12.translate(str.maketrans('123','133'))
输出:
'133'


为什么把‘133’转成‘123’转不过去?求大神们指点
最佳答案
2017-11-21 09:32:53
我认为maketrans中,前面一个需要转换的内容中不应该有重复,133显然是有重复值的,这就会造成困扰,究竟是把3对到2,还是对应到3,这就要看具体源码部分是怎么设定的了。translate的作用并不是等位替换,所以你这个写法本身就不太合适。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-11-21 09:30:51 | 显示全部楼层
如果直接输出str.maketrans(),是这样的:
str.maketrans('133','123')
{49: 49, 51: 51}

str.maketrans('123','133')
{49: 49, 50: 51, 51: 51}

求大神们解答!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-21 09:32:53 | 显示全部楼层    本楼为最佳答案   
我认为maketrans中,前面一个需要转换的内容中不应该有重复,133显然是有重复值的,这就会造成困扰,究竟是把3对到2,还是对应到3,这就要看具体源码部分是怎么设定的了。translate的作用并不是等位替换,所以你这个写法本身就不太合适。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-21 09:34:33 | 显示全部楼层
  1. str11 = '133'
  2. print(str11.translate(str.maketrans('133','266')))
复制代码

266
转换关系是一一对应,不然后面的会把前面的覆盖
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-11-21 09:51:45 | 显示全部楼层
本帖最后由 python_techlog 于 2017-11-21 10:01 编辑

感谢楼上各位的指点。经过多次尝试,我觉得是这样的:
str11.translate(str.maketrans('133','123'))
这句话要实现三个操作:a.把1转成1;b.把3转成2;c.把3转成3,而python应该是要把这三个操作都先记下来再统一转化,这样一来第三个操作就把第二个操作覆盖了。
如果这句话换成:
str11 = '133'
str11.translate(str.maketrans('133','132'))
输出结果就是:‘123’
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-4 03:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表