Swap-Methode für Listenelemente

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 :wink:
Zuletzt geändert von wuf am Montag 22. März 2004, 16:04, insgesamt 1-mal geändert.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi wuf,

swappen geht in Python so:

Code: Alles auswählen

liste[0], liste[5] = liste[5], liste[0]
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
Zuletzt geändert von Dookie am Montag 22. März 2004, 17:21, insgesamt 1-mal geändert.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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:

Code: Alles auswählen

list = swap_list(mylist)
print list.swap(0,5)
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 :wink:
Take it easy Mates!
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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 8)


Gruß

Dookie
Antworten