Python 带约束列表的置换
我拼命地试图在执行位置分配约束的同时获得列表的所有排列。 我有一个列表[1,2,3,4,5,6](6只是一个例子,我想找到一些可以适用于每个长度的东西),我想找到所有长度3的列表(也是一个例子),并有以下限制: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可由数字1和2占据
- 位置2可由数字1、2和3占据
- 位置3可由数字2、3和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页,它是另一个代码,旨在找到将第一个节点链接到最后一个节点的最短路径。我曾试图手动生成笛卡尔积,然后删除我不想要的元素,但这是无止境的