Python 通过交换特定元素生成列表的置换

Python 通过交换特定元素生成列表的置换,python,list,combinations,permutation,cartesian-product,Python,List,Combinations,Permutation,Cartesian Product,我试图编写一个函数,通过交换某些允许的元素对来生成列表的所有可能配置 例如,如果我们有以下列表: lst = [1, 2, 3, 4, 5] 我们只允许交换以下元素对: pairs = [[0, 2], [4, 1]] i、 例如,如果列表中的第0个元素是第2个,第4个元素是第1个,那么我们只能交换第0个元素(可以有任意数量的允许交换对)。 我希望函数返回给定允许交换的列表的不同配置的数量 由于我正计划对大型列表和许多允许的交换运行此功能,因此该功能最好尽可能高效 我已经找到了通过交换所有元

我试图编写一个函数,通过交换某些允许的元素对来生成列表的所有可能配置

例如,如果我们有以下列表:

lst = [1, 2, 3, 4, 5]
我们只允许交换以下元素对:

pairs = [[0, 2], [4, 1]]
i、 例如,如果列表中的第0个元素是第2个,第4个元素是第1个,那么我们只能交换第0个元素(可以有任意数量的允许交换对)。 我希望函数返回给定允许交换的列表的不同配置的数量

由于我正计划对大型列表和许多允许的交换运行此功能,因此该功能最好尽可能高效


我已经找到了通过交换所有元素(一次交换两个元素)来生成置换的示例,但是我找不到一种方法来指定某些允许的交换对。

您已经被常用的术语“交换”从其他生产路径诱走了。切换你的攻击。相反,请注意,您需要[a[0],a[2]]和[a[1],a[4]]的乘积来获得所有可能的置换。您获取这些产品中的每一个(其中四个),并按正确的顺序在结果集中分布元素。它看起来会隐约像这样。。。在某种程度上,我使用Python作为伪代码

seq = itertools.product([a[0], a[2]], [a[1], a[4]])
for soln in seq:
    # each solution "soln" is a list of 4 elements to be distributed.
    # Construct a permutation "b" by putting each in its proper place.
    # Map the first two soln values to b[0] and b[2];
    # and the last two values to b[1] and b[4]
    b = [soln[0], soln[2], soln[1], a[3], soln[4]]

你能从那里拿走吗?这就是想法;我让你来概括一下这个算法。

谢谢你的建议。当我在for循环中打印
soln
时,它是一个由两个数字组成的列表,而不是4个数字。我遗漏了什么吗?不,我遗漏了什么——那应该是(a[0],a[2])的置换与(a[1],a[4])的置换的(乘积)交叉。在我出门的路上,否则我会修复伪代码并测试它。