2

亲爱的这篇文章的读者,

你知道如何在 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 a series lists in Python建议,但无济于事。)

我很感激任何建议!

最好的问候,法比安

4

2 回答 2

8

你可以使用itertools.product

[a+[b] for a, b in itertools.product(list_a, list_b)]

但是,您的操作方式并没有什么问题。如果您确实需要从两个可迭代对象中获取元素的每个组合,那么在列表推导中使用两个循环就可以了。不过,该product解决方案确实具有更容易扩展到更多可迭代对象的优点(例如,很容易获得三个或四个或十个列表的每个组合,而深度嵌套的循环可能会变得很麻烦)。

于 2014-08-12T19:06:29.380 回答
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']]
>>> 
于 2014-08-12T19:12:52.977 回答