Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表元素列表的组合_Python_List_Combinations - Fatal编程技术网

Python 列表元素列表的组合

Python 列表元素列表的组合,python,list,combinations,Python,List,Combinations,我正在寻找一种方法来生成列表列表的所有可能组合,条件是应该只有“elementwise”组合。因此,如果我们有列表[1,2]和[3,4],那么结果[3,2]是允许的,但[4,2]是不允许的。对于itertools.product(*列表),最后的结果包括在内 因此,我需要以下输出:[1,2],[3,2],[1,4],[3,4],并且应该“跳过”以下选项:[4,2],[1,3]。请注意,顺序很重要!因此我不允许[2,3],只允许[3,2] 我知道我可以在以后检查这一点,但由于我在代码中生成了许多列

我正在寻找一种方法来生成列表列表的所有可能组合,条件是应该只有“elementwise”组合。因此,如果我们有列表[1,2]和[3,4],那么结果[3,2]是允许的,但[4,2]是不允许的。对于itertools.product(*列表),最后的结果包括在内

因此,我需要以下输出:[1,2],[3,2],[1,4],[3,4],并且应该“跳过”以下选项:[4,2],[1,3]。请注意,顺序很重要!因此我不允许[2,3],只允许[3,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)]

编辑|解释列表的转置方式:

根据定义,换位是交换位置的过程

*原始列表
[1,2]
[3,4]
。星号指的是列表中的元素,而不是整个列表

zip
基本上是“按元素”将值配对在一起: e、 g.通过我们的
原始清单
我们有
[1,2]
[3,4]
。在元素上调用zip将导致
(1,3)
(2,4)
。这些值按元素配对。 请注意,结果对不是列表形式

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


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

您可以将两个列表存储在一个列表列表中,然后在转换容器列表后,在其上使用
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)]

编辑|解释列表的转置方式:

根据定义,换位是交换位置的过程

*原始列表
[1,2]
[3,4]
。星号指的是列表中的元素,而不是整个列表

zip
基本上是“按元素”将值配对在一起: e、 g.通过我们的
原始清单
我们有
[1,2]
[3,4]
。在元素上调用zip将导致
(1,3)
(2,4)
。这些值按元素配对。 请注意,结果对不是列表形式

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


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

我不明白您为什么允许[2,3]而不允许[3,2]?我不明白您为什么允许[2,3]而不允许[3,2]?谢谢!这正是我想要的!你能给我解释一下第三行到底是干什么的吗?我试着用谷歌搜索,但找不到一个清晰的解释。@StudentNL看到更新的答案,希望能澄清一切。谢谢!这正是我想要的!你能给我解释一下第三行到底是干什么的吗?我试着用谷歌搜索它,但找不到一个清楚的解释。@StudentNL看到更新的答案,希望会澄清一切。