2017-10-17 4 views
0

J'essaie d'échanger des éléments dans une liste en utilisant la boucle while. Alors que la fonction ne peut échanger que deux éléments consécutifs à la fois. Et renvoyez-moi avec la liste possible dans une liste, Mais c'est seulement l'impression d'un chemin possible.Impossible d'échanger les éléments dans une liste, Python

La liste initiale est [4,3,2,1]

Résultat attendu = [[3,4,2,1], [4,2,3,1], [4, 3,1,2]]

courant de sortie = [[3,2,1,4], [3,2,1,4], [3,2,1,4]]

Mon code est

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[:]) 
+0

On ne sait pas exactement ce que vous attendez et ce que vous obtenez. – RemcoGerlich

+0

La sortie attendue est ce que je veux. Et la sortie actuelle est ce que je reçois en ce moment grâce à cette fonction – Sami

Répondre

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) 

Sortie: [[3, 4, 2, 1], [4, 2, 3, 1], [4, 3, 1, 2]]

3

Je pense que ce que vous cherchez est:

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[:]) 

La même liste était éditée et commutée encore et encore. En outre, il n'y a pas besoin de la variable temp1; vous pouvez simplement utiliser plusieurs affectations de variables via des tuples. Vous avez fait accidentellement arr1 un tableau d'un tableau de tableaux; temp_arr est déjà un tableau de tableaux, il n'est donc pas nécessaire de le placer dans un autre tableau. "i + = 1" est juste un raccourci pour "i = i + 1". Il est préférable d'utiliser arr1 comme variable de fonction, car les majuscules ne sont généralement pas utilisées pour nommer.

+0

Merci! ça a fonctionné parfaitement :) – Sami