python - 用字母替换数字并提供所有排列
问题描述
在将数字转换为可能的视觉相似字母时,我需要确定具有数字的字符串的所有可能字母组合。
使用字典:
number_appearance = {
'1': ['l', 'i'],
'2': ['r', 'z'],
'3': ['e', 'b'],
'4': ['a'],
'5': ['s'],
'6': ['b', 'g'] ,
'7': ['t'],
'8': ['b'],
'9': ['g', 'p'],
'0': ['o', 'q']}
我想编写一个函数来接受输入并创建所有可能的字母组合。例如:
text = 'l4t32'
def convert_numbers(text):
return re.sub('[0-9]', lambda x: number_appearance[x[0]][0], text)
我希望输出是一个包含所有可能排列的列表:
['later', 'latbr', 'latbz', 'latez]
如果您只是从 中获取每个列表中的第一个字母,则上面的函数有效number_appearance
,但我试图找出迭代所有可能组合的最佳方法。任何帮助将非常感激!
解决方案
作为您自己答案的升级,我建议以下内容:
def convert_numbers(text):
all_items = [number_appearance.get(char, [char]) for char in text]
return [''.join(elem) for elem in itertools.product(*all_items)]
改进之处在于:
- 它不会将文本转换为列表(没有必要)
- 你不需要正则表达式
- 如果您决定还想在数字之上添加其他字符,它仍然可以工作
推荐阅读
- python-3.x - 使用 ID 列表仅抓取不包含推文文本的推文元数据
- websphere - 使用 Angular 6 的 Websphere 门户
- android - 我应该在 Firestore 中存储什么,以便我可以根据从自动完成位置 api 获取的详细信息获取数据?
- sql-server - 比较内存与磁盘表的 SQL Server 性能
- angular - How to use @fontawesome social network icons on angular 7?
- ffmpeg - HTTP 流式桌面到浏览器的巨大延迟
- mysql - http://IP:3306 揭示了潜在的利用?
- angular - 在 Ionic3 中下拉刷新时出错
- go - 为什么调用此 String() 方法而不按名称调用它
- c# - 使用 C# 中的 Linq 检查 Selenium 中的元素计数是否>0