python - 从嵌套的字母列表中生成所有单词组合
问题描述
问题是按字典顺序生成单词。Allword
所以从生成Letters
:
#we have a list containing lists which contains alphabets
#for eg.:
Letters=[['A','B','C'],['D','E','F'],['P','Q','R','S']]
#This is input and output is supposed to be like this
Allword=['ADP', 'ADQ', 'ADR', 'ADS', 'AEP', 'AEQ', 'AER', 'AES', 'AFP', 'AFQ', 'AFR', 'AFS', 'BDP', 'BDQ', 'BDR', 'BDS', 'BEP', 'BEQ', 'BER', 'BES', 'BFP', 'BFQ', 'BFR', 'BFS', 'CDP', 'CDQ', 'CDR', 'CDS', 'CEP', 'CEQ', 'CER', 'CES', 'CFP', 'CFQ', 'CFR', 'CFS']
我使用了迭代算法,它仅在 List Letters 的长度为 3 时才有用
for i in Letters[0]:
for j in Letters[1]:
for k in Letters[2]:
b=i+j+k
Allword.append(b)
我正在尝试找到一种可以完成相同工作但不受长度限制的算法。我该怎么办?
解决方案
您需要内部列表的笛卡尔积。你有itertools.product
这个。然后只需将结果元组映射str.join
为获取字符串列表:
from itertools import product
list(map(''.join, product(*Letters)))
# ['ADP', 'ADQ', 'ADR', 'ADS', 'AEP', 'AEQ'...
推荐阅读
- php - 未定义的属性:Pages::$course_model 错误
- c# - 如何限制用户选中/取消选中 CheckBoxList 中的其他复选框,直到上一次单击的 SelectedIndexChanged 未完成
- sorting - 我的 golang stldib 排序出了什么问题?
- generics - 对于任何泛型类型参数 T,如何使 Fn(T) + 'static 注册为 'static?
- c++ - 可以将类对象创建为仅左值吗?
- ruby-on-rails-5 - 未经授权的连接尝试被 Rails 5 ActionCable 拒绝
- java - Parse Int 使我的程序崩溃,是的,我将 xml iput 类型设置为 number
- javascript - jQuery 与 doctype 声明之前输出的文本进行交互
- python - 如何使用 For 循环一次选择一行
- javascript - Angular 推送到 Django 以获取用户登录表单错误“SyntaxError: Unexpected token < in JSON at position 2 at JSON.parse (
)"