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_Combinatorics - Fatal编程技术网

Python 带约束列表的置换

Python 带约束列表的置换,python,list,combinatorics,Python,List,Combinatorics,我拼命地试图在执行位置分配约束的同时获得列表的所有排列。 我有一个列表[1,2,3,4,5,6](6只是一个例子,我想找到一些可以适用于每个长度的东西),我想找到所有长度3的列表(也是一个例子),并有以下限制: 位置1可由数字1和2占据 位置2可由数字1、2和3占据 位置3可由数字2、3和4占据 不允许重复相同的数字 这将给出这些列表:[1,2,3],[1,2,4],[1,3,2],[1,3,4],[2,1,3],[2,3,4],[2,1,4] 过滤这些子集的产品(): from itert

我拼命地试图在执行位置分配约束的同时获得列表的所有排列。 我有一个列表[1,2,3,4,5,6](6只是一个例子,我想找到一些可以适用于每个长度的东西),我想找到所有长度3的列表(也是一个例子),并有以下限制:

  • 位置1可由数字1和2占据
  • 位置2可由数字1、2和3占据
  • 位置3可由数字2、3和4占据
  • 不允许重复相同的数字
这将给出这些列表:[1,2,3],[1,2,4],[1,3,2],[1,3,4],[2,1,3],[2,3,4],[2,1,4]

过滤这些子集的
产品()

from itertools import product

for combo in product([1, 2], [1, 2, 3], [2, 3, 4]):
    if len(set(combo)) == 3:
        print(combo)
或作为列表:

[combo for combo in product([1, 2], [1, 2, 3], [2, 3, 4]) if len(set(combo)) == 3]
输出:

>>> from itertools import product
>>> [combo for combo in product([1, 2], [1, 2, 3], [2, 3, 4]) if len(set(combo)) == 3]
[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (2, 1, 3), (2, 1, 4), (2, 3, 4)]

所以你想要这些数字的乘积(
itertools.product([1,2],[1,2,3],[2,3,4])
),带有一点唯一的数字过滤?这个伪代码出现在pdf的第8页,不是吗?不,实际上在第8页,它是另一个代码,旨在找到将第一个节点链接到最后一个节点的最短路径。我曾试图手动生成笛卡尔积,然后删除我不想要的元素,但这是无止境的