如何基于任意长度的字母候选列表生成所有可能的组合单词
生成不定长字母候选列表的所有组合单词
实现代码
from itertools import product def generate_words(candidate_lists): # * 解包输入列表,适配任意长度的子列表输入 all_combinations = product(*candidate_lists) # 字母元组转为字符串单词 return [''.join(comb) for comb in all_combinations]
测试示例
输入测试用例 test_list = [['l','b'], ['e','d'], ['s','t']]
调用代码:
result = generate_words(test_list) print(result)
输出结果:['les', 'let', 'lds', 'ldt', 'bes', 'bet', 'bds', 'bdt']
原有代码错误说明
- 第一种写法
res = list(map(prod, zip(test_list)))
zip会遍历拆分外层列表的每个子列表作为单独参数,每次仅给product传入单个子列表,返回的是多个独立的product生成器对象,无法得到全量笛卡尔积。
- 第二种写法
list(product(letter[0],letter[1],letter[2]))
手动指定索引仅支持固定3个子列表的输入场景,使用
*解包输入列表可以自动将所有子列表作为参数传入product,适配任意长度的输入。
内容的提问来源于stack exchange,提问作者Ghof-90
相关产品推荐
相关产品推荐

