如果我有列表my_list = [['a', 'b'], ['c', 'd', 'e']
,如何创建所有可能的元组的列表,其中每个元组都包含来自每个子列表的单个元素?例如:
('a', 'e')
有效
('a', 'b')
无效
('b', 'c')
有效
('c', 'd')
无效
重要的是,my_list
可以包含任意数量的元素(子列表),并且每个子列表可以具有任意长度。我试图让递归生成器起步,但它还不存在。
我想尝试使用递归而不是itertools。
逻辑是一次遍历2个子列表,并将这些结果存储为下一个子列表扩展的输入。
def foil(lis=l):
if len(lis) == 2:
for x in l[0]:
for y in l[1]:
yield x + y
else:
for p in foil(l[:-1]):
yield p
for i in foil():
print(i)
但是,这显然仅适用于len(my_list) == 2
。例如,它还需要与my_list = [['a'], ['b'], ['c', 'd']]
一起使用,它将返回:
('a', 'b', 'c')
('a', 'b', 'd')
干杯!
答案 0 :(得分:3)
使用itertools.product
:
import itertools
my_list = [['a', 'b'], ['c', 'd', 'e']]
print(list(itertools.product(*my_list)))
# [('a', 'c'), ('a', 'd'), ('a', 'e'), ('b', 'c'), ('b', 'd'), ('b', 'e')]
my_list = [['a'], ['b'], ['c', 'd']]
print(list(itertools.product(*my_list)))
#[('a', 'b', 'c'), ('a', 'b', 'd')]