2017-06-12 3 views
-1

Ich versuche einen Algorithmus zum Mischen einer Liste zu machen und dann eine neue Liste aller Kombinationen nach dieser Regel zu erstellen:Wie könnte ich eine Liste nach dieser Regel mischen?

Sie dürfen nur ein Paar tauschen. Zum Beispiel:

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

Irgendwelche Gedanken darüber, wie man es schreibt?

Bearbeiten: Saschas-Code hat gut funktioniert. Ich schrieb diesen Code, bevor die Frage zu stellen:

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) 

Ich war mir bewusst, dass ich wegen der ungeordneten Paare einige identische Elemente in der Liste bekommen würde, aber es gerade eine Liste voller identische Elemente. Irgendwelche Gedanken warum?

+0

Ihr Swapping falsch ist. Sie würden eine temporäre Variable benötigen (a [i] geändert, bevor sie verwendet wurde, um [j] zu setzen). Der Code in meinem Ansatz funktioniert anders (Python-Style Swap)! Das nächste Mal füge den Code direkt hinzu! – sascha

Antwort

0
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) 
+0

Danke, check edit! –

0

die Funktion unten Versuchen:

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 
Verwandte Themen