列表的组合-Elementwise

时间:2019-03-21 16:33:46

标签: python list combinations

我正在寻找一种方法来生成列表列表的所有可能组合,但条件是仅应“按元素”组合。因此,如果我们有列表[1,2]和[3,4],则结果[3,2]是允许的,但是[4,2]是不允许的。使用itertools.product(* lists)包含最后一个结果。

因此,我想要以下输出:[1,2],[3,2],[1,4],[3,4],并且以下选项应该被“跳过”:[4,2] ,[1,3]。请注意,顺序很重要!因此,我不允许[2,3],仅允许[3,2]。

我知道以后可以进行检查,但是由于我在代码中生成了很多列表,因此宁愿避免这种情况。

1 个答案:

答案 0 :(得分:2)

您可以将两个列表存储在一个列表中,然后在转置容器列表之后,在其上使用itertools.product()

import itertools
original_list =  [[1,2], [3,4]]
transposed_list = list(map(list, zip(*original_list)))
print(list(itertools.product(*transposed_list)))

输出: [(1, 2), (1, 4), (3, 2), (3, 4)]

编辑|解释列表的移位方式:

按照定义,移调是交换位置的过程。

*original_list的意思是[1,2][3,4]。星号是指列表的元素,而不是整个列表

zip基本上按“元素方式”将值配对在一起: 例如使用original_list,我们有[1,2][3,4]。在我们的元素上调用zip将得到(1,3)(2,4)。这些值按元素进行配对。 请注意,结果对不是列表形式。

map将函数应用于输入列表中的每个元素。在我们的示例中 我们想将(内置)list函数应用于按元素的对-即,将每个对的元组转换为一个列表。这就是将(1,3)(2,4)变成[1,3][2,4]

的原因

最后,将映射结果转换为包含列表,其中包含元素对,生成[ [1,3], [2,4] ]