从 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)
从给定的数组中,我需要所有 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)