key_map = {'1':“'-”,'2':'abc','3':'def', '4':'ghi','5':'jkl','6':'mno', '7':'pqrs','8':'tuv','9':'wxyz'}
生成所有3个字符前缀的列表,这些前缀可以是 从开始的按键产生。
pt = PText() pt.add('234') [pt.possible_prefixes()中前缀的前缀]
['adg', 'adh', 'adi', 'aeg', 'aeh', 'aei', 'afg', 'afh', 'afi', 'bdg', 'bdh', 'bdi', 'beg', 'beh', 'bei', 'bfg', 'bfh', 'bfi', 'cdg', 'cdh', 'cdi', 'ceg', 'ceh', 'cei', 'cfg', 'cfh', 'cfi']
答案 0 :(得分:1)
尽管起初我在阅读您的问题时遇到了一些麻烦,但我相信您正在寻找一个函数,该函数将使用包含字典键的字符串,并从这些键下的字符串中查找所有字符组合。
尽管我们可以使用循环或列表解析来自己实现,但是您正在寻找的是Cartesian product的形式。 Python的标准库已经可以使用itertools.product
来做到这一点。它以任意数量的Iterables作为参数,并返回从这些Iterables中获取的单个元素的所有组合。
因此,您的possible_prefixes(keys)
看起来像
import itertools
def possible_prefixes(keys):
return ["".join(res) for res in itertools.product(*(key_map[key] for key in keys))]
*()
是generator comprehension,它将每个键转换为其相应的值,然后对其进行扩展,以便每个条目都是itertools.product
的单独参数。因此,如果我们填写keys = '234'
,它将扩展为itertools.product('abc', 'def', ghi')
,从而得到所需的结果。 "".join(res) for res in
是我们需要的列表理解,因为itertools.product
实际上返回元组,并且您需要一个字符串列表。