Seite 1 von 1
Swap-Methode für Listenelemente
Verfasst: Montag 22. März 2004, 15:08
von wuf
Hallo Python Freunde
Ich habe eine Frage zur Manipulation von Listen.
Hier folgt eine Versuchsliste:
liste = [a,b,c,d,e,f]
In dieser Liste möchte ich Elemente untereinander tauschen.
Zum Beispiel möchte ich bei der obigen Liste Element a mit f
tauschen. Die resultierende Liste würde wie folgt aussehen:
resliste = [f,b,c,d,e,a]
Gibt es in Python eine Methode die es ermöglicht Elemente
direkt mit Hilfe einer Indexangabe zu tauschen (swappen).
Meine Vorstellung für den obigen Fall wäre:
liste.swap(0,5)
Besten Dank für Eure Hilfe
Gruss wuf
Verfasst: Montag 22. März 2004, 15:37
von Dookie
Hi wuf,
swappen geht in Python so:
Du kannst aber (ab Python2.2) auch eine eigene Klasse von list ableiten, und um eine swap-Methode erweitern.
Code: Alles auswählen
class swap_list(list):
def swap(self,a,b):
self[a], self[b] = self[b], self[a]
return self
Das
return self am Ende brauchts zwar nicht, ich mache es aber auch bei inplace-operationen, weil dann auch das Ergebnis der Methode verwendet werden kann und ja nur eine Referenz auf das Objekt zurückgegeben wird.
Gruß
Dookie
Verfasst: Montag 22. März 2004, 17:21
von wuf
Hi Dookie
Besten Dank für Deine lehrreichen Vorschläge. Habe sie ausprobiert.
Funktionieren bestens! Konstruierte anhand Deinem ersten Vorschlag
folgende Methode:
Code: Alles auswählen
def swap(list,src,dest):
list[dest],list[src] = list[src],list[dest]
return list
Test der Methode:
Code: Alles auswählen
mylist = ['a','b','c','d','e','f']
print swap(mylist,0,5)
Dein zweiter Vorschlag habe ich wie folgt ausprobiert:
Wie ist die Anwendung Deines zweiten Vorschlages, wenn mehrere
Listen manipuliert werden müssen. Beim folgenden Beispiel mit
zwei Listen:
Code: Alles auswählen
mylist1 = ['a','b','c','d','e','f']
mylist2 = ['g','h','i','j','k','l']
Meine Lösung:
Code: Alles auswählen
list = swap_list(mylist1)
print list.swap(0,5)
list = swap_list(mylist2)
print list.swap(0,5)
Gruss wuf
Verfasst: Montag 22. März 2004, 17:36
von Dookie
Hi wuf,
Merke:
benenne eine Variable nie wie eine eingebaute Funktion oder Klasse!
Ich würde die zwei Listen gleich als instanzen von swap_list erzeugen.
Code: Alles auswählen
mylist1 = swap_list(('a','b','c','d','e','f'))
mylist2 = swap_list(['g','h','i','j','k','l'])
print mylist1.swap(0,5)
print mylist2.swap(0,5)
for a, b in zip(mylist1,mylist2):
print a, b
mylist3 = swap_list("mnopqr")
mylist3.reverse()
print mylist3
Du siehst, Instanzen der neuen Klasse kannst Du wie herkömmliche Listen verwenden und hast auch alle Methoden die für Listen definiert sind. Das ist OOP
Gruß
Dookie