所以我有这个字符串。
6#666#665533999
我想把它解析成多个小字符串(或直到字符改变)并忽略它,#
以便我可以6 = M or 666 = O or 9 = W
像电话的拨号盘一样替换它。
6#666#665533999 -> 6, 666, 66, 55, 33, 999
所以我用这个split('#')
方法删除了#
,并且无法弄清楚接下来要做什么。我尝试过一些蛮力方法,它在一定程度上解决了这个问题但是有没有更简单或更优雅的解决方案呢?
发布于 2018-09-05 09:41:08
>>> c = "6#666#665533999"
>>> ["".join(g) for k, g in groupby(c) if k != '#']
['6', '666', '66', '55', '33', '999']
然后有一个字典,将每个集合映射到拨号盘中的字符。
cmap = {'77': 'Q', '9999': 'Z'} # And so forth..
发布于 2018-09-05 09:53:27
def encode(nums):
return ["".join(g) for k, g in itertools.groupby(nums) if k != '#']
chars = {str(n):dict(enumerate(chrs,1)) for n,chrs in enumerate("ABC DEF GHI JKL MNO PQRS TUV WXYZ".split(), 2)}
nums = "6#666#665533999"
nums = encode(nums)
message = ''.join(chars[n[0]][len(n)] for n in nums)
In [28]: message
Out[28]: 'MONKEY'
https://stackoverflow.com/questions/-100002561
复制相似问题