我怎样才能将列表改组为这条规则?

How could I shuffle a list to this rule?

我正在尝试制作一个算法来打乱列表,然后根据此规则制作一个包含所有组合的新列表:

您只能交换一对。例如:

array = [1, 2, 3]
[3, 2, 1]        #number at index 0 switched with number at index 2

有想过怎么写吗?

编辑: Saschas 代码运行良好。我在问问题之前写了这段代码:

sols = []
for i in range(len(a)):
    for j in range(len(a)):
        a[i] = a[j]
        a[j] = a[i]
        sols_perm.append(a)

我知道由于无序对,我会在列表中得到一些相同的元素,但它只是创建了一个充满相同元素的列表。有什么想法吗?

sols = []
for i in range(len(array)):
    for j in range(i+1, len(array)):    # symmetry-reduction -> ordered pairs
        sol = array[:]                  # copy list
        sol[i], sol[j] = sol[j], sol[i] # swap
        sols.append(sol)

尝试以下功能:

def swap(inlist):
    n = len(inlist)
    res = [x for x in inlist]
    for i in range(n):
        for j in range(i+1, n):
            tmp = res[i]
            res[i] = res[j]
            res[j] = tmp
    return res