我想按字符列表列表生成一个单词列表,如:
A=[['a','b','c'],['d'],['e','f']]
其中a[0]
存储所有可能的角色,a[1]
将所有可能的角色存储在第二位,依此类推。列表' A'生成的所有可能单词将是:
ade
adf
bde
bdf
cde
cdf
我通过以下方式生成此列表:
for i in a[0]:
for j in a[1]:
for k in a[2]:
print i+j+k
此代码适用于list(i.e. len(A))
的固定长度。我想编写一个通用代码,可以按任意大小的列表生成wordlist。
答案 0 :(得分:3)
您可以使用itertools.product
执行此操作:
>>> from itertools import product
>>> characters = [['a','b','c'],['d'],['e','f']]
>>> [''.join(item) for item in product(*characters)]
['ade', 'adf', 'bde', 'bdf', 'cde', 'cdf']
无论子列表的长度如何,这都将起作用,因为product
方法计算子列表元素的笛卡尔积。此外,由于我们使用python *characters
magic传递子列表,我们可以传递任意数量的子列表。