无法交换列表中的元素,Python

时间:2017-10-17 09:59:18

标签: python-2.7 python-3.x

我正在尝试使用while循环交换列表中的元素。这样函数一次只能交换两个连续的元素。并将列表中的可能列表返回给我,但它只打印了一条可能的路径。

初始清单是[4,3,2,1]

预期产出= [[3,4,2,1],[4,2,3,1],[4,3,1,2]]

当前输出= [[3,2,1,4],[3,2,1,4],[3,2,1,4]]

我的代码是

array = [4,3,2,1]

def possible_paths(Array):
    temp_arr = []
    i=0
    while i < (len(Array) -1):
        temp1 = Array[i]
        Array[i] = Array[i+1]
        Array[i+1] = temp1
        temp_arr.append(Array)
        i = i+1
    return temp_arr

arr1 = []
poss = possible_paths(array)
arr1.append(poss)
print(arr1[:])

2 个答案:

答案 0 :(得分:3)

我认为您正在寻找的是:

array = [4,3,2,1]

def possible_paths(arr1):
    temp_arr = []
    i=0
    while i < (len(arr1) -1):
        nextpath = arr1[:]
        nextpath[i], nextpath[i+1] = nextpath[i+1], nextpath[i]
        temp_arr.append(nextpath)
        i += 1
    return temp_arr

arr2 = possible_paths(array)
print(arr2[:])

相同的列表被一次又一次地编辑和切换。此外,不需要变量temp1;你可以通过元组使用多个变量赋值。你不小心让arr1成了一个数组数组; temp_arr已经是一个数组数组,因此不需要将它放在另一个数组中。 “i + = 1”只是“i = i + 1”的简写。最好使用arr1作为函数变量,因为大写字母通常不用于命名。

答案 1 :(得分:2)

array = [4,3,2,1]
def possible_paths(Array):
    temp_arr = []
    i=0
    while i < (len(Array) -1):
        clone_array = Array[:]
        clone_array[i], clone_array[i+1] = clone_array[i+1], clone_array[i]
        temp_arr.append(clone_array)
        i = i+1
    return temp_arr

poss = possible_paths(array)
print(poss)

输出:[[3,4,2,1],[4,2,3,1],[4,3,1,2]]