亲爱的读者,
你知道如何在Python中有效地形成两个列表的联合序列吗?假设有以下两个列表:
list_a = [['a','b'],['a','c'],['b','c']]
list_b = ['h','i']
我想计算:
new_list = [['a','b','h'],['a','b','i'],['a','c','h'],['a','c','i'],['b','c','h'],
['b','c','i']].
到目前为止,我使用以下循环:
new_list = [r+[j] for j in list_b for r in list_a]
然而,我发现这很难看。我不喜欢这两个循环。我更喜欢使用函数。
您是否有另一个想法来实现所需的任务? (除此之外,我试图遵循这个Get the cartesian product of a series of lists in Python建议,但无济于事。)
我很感激任何建议!
祝你好运, 法比安
答案 0 :(得分:8)
您可以使用itertools.product
:
[a+[b] for a, b in itertools.product(list_a, list_b)]
然而,你做这件事的方式并没有什么不妥。如果你真的需要从两个迭代中获得元素的每个组合,那么在列表理解中使用两个循环是很好的。但是,product
解决方案确实具有更容易扩展到更多迭代的优势(例如,很容易获得三个或四个或十个列表的每个组合,而深度嵌套的循环可能变得麻烦)。 / p>
答案 1 :(得分:0)
它看起来如何?
>>> new_list = []
>>> for item in itertools.product(list_a, list_b):
... new_list.append([x for li in list(item) for x in li])
...
>>> new_list
[['a', 'b', 'h'], ['a', 'b', 'i'], ['a', 'c', 'h'], ['a', 'c', 'i'], ['b', 'c', 'h'], ['b', 'c', 'i']]
>>>