我想按字符列表生成一个单词列表,比如:
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))
。我想写一个泛化代码,可以生成任何大小的单词列表。
您可以使用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
魔术传递子列表,因此我们可以传递任意数量的子列表。