从 Python 中的数组获取 1 元素交换列表

Get a list of the 1-element swap from an array in Python

从给定的数组中,我需要所有 1-element-swap 列表的列表。如果我用例子解释一下,我不知道这怎么叫得更好。

例如。对于给定的 array :

array = [1,2,3,4]

我需要输出:

[2,1,3,4]
[3,2,1,4]
[4,2,3,1]
[1,3,2,4]
[1,4,3,2]
[1,2,4,3]

这意味着如果 K 是数组的大小,我必须得到一个 (K(K-1))/2 输出数组。

在上面的示例中,K=4 所以 4(3)/2=6 输出数组。

我真的不知道该怎么做。我知道有 itertools 函数,但是如果我使用 itertools.permutations(array) 我没有得到我想要的解决方案,因为这向我展示了所有排列,我只需要一个“1 交换元素”列表的列表.

像这样的事情应该让你开始:

>>> x = [1,2,3,4]
>>> for i in xrange(len(x)):
...     for j in xrange(i + 1, len(x)):
...         y = x[:]
...         y[i], y[j] = y[j], y[i]
...         print y
... 

很简单:

array = [1,2,3,4]

# swaps to elements, and return the resulting array
def swap(x, i, j):
    x[i], x[j] = x[j], x[i]
    return x

arrays = [swap(array[:], i, j) 
                 for i in range(len(array))
                 for j in range(i + 1, len(array))]

print(arrays)