2017-08-23 96 views
2

我有一个字母数字数字作为字符串“4525ABT2”,我试图“翻译”为只有数字。我尝试了很多方法,很聪明,真的很愚蠢和漫长,而且看起来很多(我在这里找到了Java的解决方案,但它在python中不起作用,也没有将所有字符更改为数字的解决方案)。 我的最后一次尝试看起来像这样在Python中将字母数字字符串转换为数字字符串

for i in alpha:  
     alpha1 = alpha.replace("A" or "B" or "C", "2") 
     alpha2 = alpha1.replace("D" or "E" or "F", "3") 
     alpha3 = alpha2.replace("G" or "H" or "I", "4") 
     alpha4 = alpha3.replace("J" or "K" or "L", "5") 
     alpha5 = alpha4.replace("M" or "N" or "O", "6") 
     alpha6 = alpha5.replace("P" or "Q" or "R" or "S", "7") 
     alpha7 = alpha6.replace("T" or "U" or "V", "8") 
     alpha8 = alpha7.replace("W" or "X" or "Y" or "Z", "9") 

phone = str(alpha8) 
return phone 

在此先感谢!

+0

提供您提到的Java解决方案的链接可能会帮助其他人深入了解你究竟想要做什么。 – anothernode

+0

你说得对。我应该考虑一下。我找不到帖子,但下一次 - 会做。 – Ninsa

回答

-1

这将是更容易,如果你更换大小相同,但这应该工作:

replist = ["","","ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"] 

for i,v in enumerate(replist): 
    for l in v: 
     alpha = alpha.replace(l,str(i)) 

输入: “AHK62ZT”

输出: “2456298”

+1

这仍然是一个不好的解决方案,因为替换字符串中的字符(在循环中不少于)是昂贵的。 – hop

+0

@hop哦,是的,你的解决方案要好得多,我只是想提供一个版本,使用与OPs原始尝试相同的基本原则。 – Zinki

+0

非常感谢您的回答! – Ninsa

4

使用合适的工具:

>>> s = "4525ABT2" 
>>> table = str.maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
          '22233344455566677778889999') 
>>> s.translate(table) 
'45252282'