Warum haben Tupel keine .index(x)-Methode?

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.
Benutzeravatar
Goswin
User
Beiträge: 361
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen

Warum haben Tupel keine .index(x)-Methode?

Beitragvon Goswin » Dienstag 15. Januar 2008, 12:22

Warum haben Tupel keine .index(x)-Methode :o ?

Diese Frage stelle ich aus reiner Neugier, da meiner Meinung nach eine .index(x)-Methode für Tupel so naheliegend ist. Natürlich habe ich kein echtes Problem damit, da ich ja zum Beispiel

Code: Alles auswählen

Tupel = (2,3,5,7,11,13,17,19)
ind = list(Tupel).index(7)

schreiben kann, und vieleicht sogar eine eigene Tupel-Klasse mit einer zusätzlichen Methode schreiben kann. Aber ist so etwas performant?
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Dienstag 15. Januar 2008, 12:31

Man könnte es ganz einfach machen oO

Code: Alles auswählen

class MyTuple(tuple):
    def index(self, value):
        for j, i in enumerate(self):
            if i == value:
                return j


Aber warum nicht gleich listen nehmen?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Dienstag 15. Januar 2008, 12:58

Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Warum haben Tupel keine .index(x)-Methode?

Beitragvon gerold » Dienstag 15. Januar 2008, 13:48

Goswin hat geschrieben:Warum haben Tupel keine .index(x)-Methode?

Hallo Goswin!

Tuppel sind ressourcenschonender als Listen. Dafür muss man aber auch auf ein paar Dinge verzichten.

Und wenn ich mehr brauche als mir ein Tuppel zur Verfügung stellen kann, steige ich auf eine Liste um.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Goswin
User
Beiträge: 361
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen

Beitragvon Goswin » Dienstag 15. Januar 2008, 14:36

Im von CM zitierten Parallelforum hei3t es unter anderem:

I use tuples
when I already know what goes into them and in what order.
index() and count() are totally useless
when you use tuples (or, indeed, any sequence) in this manner.


Im Gegensatz zu meinem Programm wei3 ich als Mensch natürlich, an welcher Stelle des Tupels mein x liegt, und könnte versuchen, es auch abzuspeichern und im Algoritmus mitzuführen. Aber das geht auch nur, wenn das x als Key zu gebrauchen ist, zum vorherigen Beispiel:

Code: Alles auswählen

Tupel = (2,3,5,7,11,13,17,19)
wo_in_Tupel = {2:0, 3:1, 5:2, 7:3, 11:4, 13:5, 17:6, 19:7}
ind = wo_in_Tupel[7]


Ich hoffe einmal, dass das trotz des zusätzlichen Dictionarys effizienter ist als eine Listenabfrage. Oder?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Dienstag 15. Januar 2008, 16:34

Goswin hat geschrieben:Ich hoffe einmal, dass das trotz des zusätzlichen Dictionarys effizienter ist als eine Listenabfrage. Oder?

Wohl kaum.

Hast du eigentlich was gegen Pythoncode-Tags?
Benutzeravatar
Goswin
User
Beiträge: 361
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen

Beitragvon Goswin » Dienstag 15. Januar 2008, 19:26

OK CM, ich drücke mich mal besser aus:
Ich hoffe, dass trotz eines zusätzlichen Dictionary-Aufbaus 100000 Dictionary-Abfragen effizienter sind als 100000 Listenabfragen. Und falls es weniger Abfragen sein sollten, hoffe ich, dass es zumindest nicht viel langsamer ist.

Danke für den Hinweis, das es Textobjekte (?) gibt, die Tags hei3en, und mit welchen man das Problem unter Umständen auch angehen kann; ich habe sie soeben in meinem Pythonbuch entdeckt und werde sie mir bei Gelegenheit anschauen. Wie sollte ich etwas gegen eine Sache haben, von der ich nicht einmal gewu3t habe, das sie existiert! Ich komme halt aus einem gaaanz primitiven, nicht objektorientierten, und sehr lückenbehafteten C-Hintergrund.
lunar

Beitragvon lunar » Dienstag 15. Januar 2008, 19:38

Goswin hat geschrieben:Danke für den Hinweis, das es Textobjekte (?) gibt, die Tags hei3en, und mit welchen man das Problem unter Umständen auch angehen kann; ich habe sie soeben in meinem Pythonbuch entdeckt und werde sie mir bei Gelegenheit anschauen. Wie sollte ich etwas gegen eine Sache haben, von der ich nicht einmal gewu3t habe, das sie existiert! Ich komme halt aus einem gaaanz primitiven, nicht objektorientierten, und sehr lückenbehafteten C-Hintergrund.

Uh? Was hat das den mit Python als Programmiersprache, bzw mit deinem Programmiersprachen-Hintergrund zu tun?

Es geht darum, Code im Forum farblich aus zu zeichnen. Dafür brauch man kein Buch, dafür muss man sich einfach mal nur die Knöpfe anschauen, die beim Posten so über dem Textfeld sind. Die haben nämlich auch einen Sinn, weißt du...
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Dienstag 15. Januar 2008, 23:00

@Goswin
Mit lieben Grüßen von Lunar.
Scheinbar meint er es nicht so wie er es schreibt.
Es gibt Python-Neulinge, die nicht soviel wie er von Python und diesem Forum wissen. Damit die es trotzdem schnell begreifen, hat er halt eine sehr direkt Ausdrucksweise.
Mfg
HWK
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 15. Januar 2008, 23:25

HWK hat geschrieben:Es gibt Python-Neulinge, die nicht soviel wie er von Python und diesem Forum wissen.

Aber manchmal erstaunt es mich dann doch, dass die Leute nicht auf die Idee kommen, zu gucken was passiert wenn man das Ding mit der Aufschrift "Python" drücken. :?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Dienstag 15. Januar 2008, 23:33

Ich fasse alles an was ich nicht verstehe. :-)

PS: Immer diese C Programmiere mit ihrer preformance ;-)
lunar

Beitragvon lunar » Mittwoch 16. Januar 2008, 17:32

HWK hat geschrieben:Mit lieben Grüßen von Lunar.
Scheinbar meint er es nicht so wie er es schreibt.
Es gibt Python-Neulinge, die nicht soviel wie er von Python und diesem Forum wissen. Damit die es trotzdem schnell begreifen, hat er halt eine sehr direkt Ausdrucksweise.

Endlich mal jemand, der mich versteht ;)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Re: Warum haben Tupel keine .index(x)-Methode?

Beitragvon birkenfeld » Mittwoch 16. Januar 2008, 17:39

gerold hat geschrieben:Tuppel sind ressourcenschonender als Listen. Dafür muss man aber auch auf ein paar Dinge verzichten.

Was jetzt das eine (weniger Speicherbedarf -- übrigens auch nur, wenn die Liste nicht zuviel overallocated hat, was bei kleinen Listen kaum vorkommt) mit dem anderen (fehlende Methode) zu tun hat, kann ich allerdings nicht erkennen.

MaW: wenn Tupel als "ressourcenschonende Listen" gedacht wären, gäbe es keinen Grund, ihnen kein index() zu geben.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Warum haben Tupel keine .index(x)-Methode?

Beitragvon gerold » Mittwoch 16. Januar 2008, 19:35

birkenfeld hat geschrieben:MaW: wenn Tupel als "ressourcenschonende Listen" gedacht wären, gäbe es keinen Grund, ihnen kein index() zu geben.

Hallo birkenfeld!

Ich habe nicht die Zeit und nicht die Lust, mir den Quellcode von Python durchzusehen. Ich gehe nur von meiner ärmlichen Hauslogik aus. --> Ein leichter Rucksack trägt sich einfacher als ein schwerer Rucksack. :roll:

Und der einzige Existenzgrund für ein Tuppel, ist in meinen Augen der, dass man damit weniger Last mitschleppt und dadurch das Programm schneller, kleiner und besser wird. So habe ich das zumindest immer zwischen den Zeilen herausgelesen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Re: Warum haben Tupel keine .index(x)-Methode?

Beitragvon birkenfeld » Mittwoch 16. Januar 2008, 19:40

gerold hat geschrieben:
birkenfeld hat geschrieben:MaW: wenn Tupel als "ressourcenschonende Listen" gedacht wären, gäbe es keinen Grund, ihnen kein index() zu geben.

Hallo birkenfeld!

Ich habe nicht die Zeit und nicht die Lust, mir den Quellcode von Python durchzusehen. Ich gehe nur von meiner ärmlichen Hauslogik aus. --> Ein leichter Rucksack trägt sich einfacher als ein schwerer Rucksack. :roll:

Und der einzige Existenzgrund für ein Tuppel, ist in meinen Augen der, dass man damit weniger Last mitschleppt und dadurch das Programm schneller, kleiner und besser wird. So habe ich das zumindest immer zwischen den Zeilen herausgelesen.

Das ist leider nicht so. Zwar haben, wie gesagt, manche Listen einen höheren Speicherverbrauch als ein entsprechendes Tupel, weil sie mehr Speicher allozieren als nötig, um viele realloc()s zu sparen, aber schneller oder besser wird ein Programm dadurch nicht.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder