在Python中,如何在不使用itertools的情况下组合给定元组列表中的一组元组?
给出如下列表:在Python中,如何在不使用itertools的情况下组合给定元组列表中的一组元组?,python,python-3.x,Python,Python 3.x,给出如下列表: [(1,2)、(3,4,5)、(6,5)] 我知道使用itertools很容易组合元组列表 (1,3,6)、(1,4,6)、(1,5,6)、(2,3,6)、(2,4,6)、(2,5,6) 但是如果不使用itertools,我如何解决它呢 [(x, y, 6) for x in (1, 2) for y in (3, 4, 5)] 另请参见,了解更多通用解决方案,这里有一个相当通用的方法,在输入上有一系列循环: lst = [(1, 2), (3, 4, 5), (6,)]
[(1,2)、(3,4,5)、(6,5)]
我知道使用itertools很容易组合元组列表
(1,3,6)、(1,4,6)、(1,5,6)、(2,3,6)、(2,4,6)、(2,5,6)
但是如果不使用itertools,我如何解决它呢
[(x, y, 6) for x in (1, 2) for y in (3, 4, 5)]
另请参见,了解更多通用解决方案,这里有一个相当通用的方法,在输入上有一系列循环:
lst = [(1, 2), (3, 4, 5), (6,)]
result = [tuple([l]) for l in lst[0]]
for l in lst[1:]:
out = []
for r in result:
for i in range(len(l)):
out.append((*r, l[i]))
result = out
print(result)
输出:
[(1, 3, 6), (1, 4, 6), (1, 5, 6), (2, 3, 6), (2, 4, 6), (2, 5, 6)]
明亮的有没有不使用列表理解的替代方法?如果您正在寻找一种复杂的方法检查,您可以使用嵌套循环。另一个想法是,定义笛卡尔乘积或从另一个站点复制粘贴,并将reduce应用于列表
reduce(笛卡尔,[(1,2),(3,4,5),(6,))
,而代码对许多人来说似乎是显而易见的,请在您的唯一代码答案中添加一些解释。还要注意的是,你没有返回元组。虽然这段代码可能会解决这个问题,但如何以及为什么解决这个问题将真正有助于提高你的文章质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。尽管下面的答案很好,你还是应该看看
def product(pools):
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
return result
product([(1,2,3),(4,5),(6,)])
[[1, 4, 6], [1, 5, 6], [2, 4, 6], [2, 5, 6], [3, 4, 6], [3, 5, 6]]