首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中字符更改时拆分

在Python中字符更改时拆分
EN

Stack Overflow用户
提问于 2018-09-05 00:49:24
回答 2查看 0关注 0票数 0

所以我有这个字符串。

代码语言:javascript
复制
6#666#665533999

我想把它解析成多个小字符串(或直到字符改变)并忽略它,#以便我可以6 = M or 666 = O or 9 = W像电话的拨号盘一样替换它。

代码语言:javascript
复制
6#666#665533999 -> 6, 666, 66, 55, 33, 999

所以我用这个split('#')方法删除了#,并且无法弄清楚接下来要做什么。我尝试过一些蛮力方法,它在一定程度上解决了这个问题但是有没有更简单或更优雅的解决方案呢?

EN

回答 2

Stack Overflow用户

发布于 2018-09-05 09:41:08

使用itertools.groupby

代码语言:javascript
复制
>>> c = "6#666#665533999"
>>> ["".join(g) for k, g in groupby(c) if k != '#']
['6', '666', '66', '55', '33', '999']

然后有一个字典,将每个集合映射到拨号盘中的字符。

代码语言:javascript
复制
cmap = {'77': 'Q', '9999': 'Z'} # And so forth..
票数 0
EN

Stack Overflow用户

发布于 2018-09-05 09:53:27

代码语言:javascript
复制
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'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档