我有一个程序,它生成并修改";n〃;元素/成员,n在程序的特定运行期间保持不变。("n"的值可能在下一次运行中发生变化(。
列表中的每个成员都是一个"成员";子列表"!这些子列表元素中的每一个不仅长度可变,而且是动态的,并且在程序运行时可能会不断变化。
所以,最终,在某个给定的点上,我的列表看起来像(假设n=3(:
[['1', '2'], ['a', 'b', 'c', 'd'], ['x', 'y', 'z']]
我希望输出如下:
['1ax', '1ay', '1az', '1bx', '1by', '1bz',
'1cx', '1cy', '1cz', '1dx', '1dy', '1dz',
'2ax', '2ay', '2az', '2bx', '2by', '2bz',
'2cx', '2cy', '2cz', '2dx', '2dy', '2dz']
即具有恰好(2*3*4(个元素的列表,其中每个元素的长度恰好为3;子列表";。
最简单的是itertools.product
:
from itertools import product
lst = [['1', '2'], ['a', 'b', 'c', 'd'], ['x', 'y', 'z']]
output = [''.join(p) for p in product(*lst)]
# OR
output = list(map(''.join, product(*lst)))
# ['1ax', '1ay', '1az', '1bx', '1by', '1bz',
# '1cx', '1cy', '1cz', '1dx', '1dy', '1dz',
# '2ax', '2ay', '2az', '2bx', '2by', '2bz',
# '2cx', '2cy', '2cz', '2dx', '2dy', '2dz']
特定于字符串的手动实现可能如下所示:
def prod(*pools):
if pools:
*rest, pool = pools
for p in prod(*rest):
for el in pool:
yield p + el
else:
yield ""
list(prod(*lst))
# ['1ax', '1ay', '1az', '1bx', '1by', '1bz',
# '1cx', '1cy', '1cz', '1dx', '1dy', '1dz',
# '2ax', '2ay', '2az', '2bx', '2by', '2bz',
# '2cx', '2cy', '2cz', '2dx', '2dy', '2dz']