Seite 1 von 1

Zugriff auf Tuples in PY

Verfasst: Sonntag 22. September 2002, 13:36
von hans
Achtung Newbie!

Wie greife ich in python auf tuples zu? Folgendes Beispiel geht nicht! obwohl ich mir das aus irgendeinem Tutorial gefischt habe.

Code: Alles auswählen

  def font_slot(self):
       (font, OK) = QFontDialog.getFont(kalamconfig.getTextFont(), self)
    if OK:
Beim if OK: erscheint bei Ausführung:
IndentationError: unindent does not match any outer indentation level

Gibt's irgend methode, um z. B. genau auf das zweite Element zuzugreifen?

Die Dokus die ich bisher gefunde und gekauft habe, sind da leider nicht sehr hilfreich. (a,b,c) Das ist ein Tupel. Und dann weiter mit dem nächsten Datentyp, z. B. Listen :?

Hans

Hab's selbst gefunden

Verfasst: Sonntag 22. September 2002, 14:43
von hans

Code: Alles auswählen

def font_slot(self):
   (font, OK) = QFontDialog.getFont(kalamconfig.getTextFont(), self)
   if OK: 
geht. Und dabei predige ich in der Firma immer, sie sollen im Delphi Sourcecode nicht so rumschmieren.......

Es lag an der falschen Einrückung

Hans

Tupel Index veraendern

Verfasst: Montag 23. September 2002, 09:00
von tabellar
Im Datenbankbereich ist das Verwenden von Listen mit Tupelelementen
eine tagtaegliche Geschichte... Es ist bei mir eine Fragestellung aufgetreten,
ob ich einzelne Indexe im Tupel veraendern kann. Also, ich moechte z.B.
den Index 0->(==0) vom Tupel "tupel=(0,'text1','text2')" veraendern.

Das Python Tutorial schreibt: ...Genau wie Strings sind Tupel unveränderlich: man kann einzelnen Elementen von Tupeln nichts zuweisen (man kann jedoch einen Großteil dieses Effekts durch Teilbereichs-Bildung und Aneinanderfügung simulieren)...

Hat jemand dies schon mal ausprobiert oder hat eine andere Idee???

Re: Tupel Index veraendern

Verfasst: Montag 23. September 2002, 09:25
von joerg
tabellar hat geschrieben: Das Python Tutorial schreibt: ...Genau wie Strings sind Tupel unveränderlich: man kann einzelnen Elementen von Tupeln nichts zuweisen (man kann jedoch einen Großteil dieses Effekts durch Teilbereichs-Bildung und Aneinanderfügung simulieren)...
Hat jemand dies schon mal ausprobiert oder hat eine andere Idee???
Das "Ändern" eines Tupel-Elements durch Slicing sieht z.B. so aus:

Erst mal ein Tupel erzeugen:
>>> x = tuple(range(7))
>>> x
(0, 1, 2, 3, 4, 5, 6)

Element 4 durch die Zahl 42 ersetzen:
>>> x = x[:4] + (42,) + x[5:]
>>> x
(0, 1, 2, 3, 42, 5, 6)

Hier werden drei Tupel addiert (aneinandergehängt) und das Ergebnis wieder x zugewiesen: Zuerst die Elemente Anfang bis 3 von x, dann ein Tupel mit der Zahl 42 und zum Schluß die Elemente 5 bis Ende von x.

Wenn ein Tupels mehrmals "geändert" werden soll, würde ich allerdings eher mit Listen arbeiten, dafür gibt' s die ja schließlich! Umwandlung durch tuple() und list().

Re: Tupel Index veraendern

Verfasst: Montag 23. September 2002, 10:05
von tabellar
Hey super!!!

Danke Joerg fuer deine schnelle Antwort... Natuerlich sind die Listen-Objekte ideal fuer das Ablegen und Aendern von Daten. Man kann so sehr schoen Datenbanktabellen simulieren...

Die Fragestellung mit den Tupels stellte sich aus paedagogischen und design-technische Gruenden... :wink:

Merci!

Re: Tupel Index veraendern

Verfasst: Montag 23. September 2002, 18:28
von hans
joerg hat geschrieben: Element 4 durch die Zahl 42 ersetzen:
>>> x = x[:4] + (42,) + x[5:]
>>> x
(0, 1, 2, 3, 42, 5, 6)
Da ich noch Newbie bin stolpere ich gleich über die Indizierung [:4] und [5:]. Kann mir mal jemand das erklären? In meinem schlauen Buch srteht da nix, dass man auf Tupel indiziert zugreifen kann.

THX
Hans

Verfasst: Montag 23. September 2002, 18:57
von RicmanX
liste[anfang:ende]

Wenn je kein Anfang bzw. Ende ist geht der Zugriff entsprechend beim ersten los oder halt bis zum letzten.

Verfasst: Montag 23. September 2002, 19:08
von hans
Hi RicmanX

wir reden von Tupeln. Oder gibt es was den indizierten Zugriff angibt keinen Unterschied zwischen liste[ ] und tupel( )?

Sorry, sind vieleicht blöde Fragen........

Hans

Verfasst: Montag 23. September 2002, 20:22
von RicmanX
Nö, ist schon berechtigt die Frage. Aber die Zugriffe auf Tuple sind identisch zu denen auf Listen, außer das man Tuplen noch Schlüssel zuweisen kann.

Verfasst: Montag 23. September 2002, 21:23
von Gast
RicmanX hat geschrieben:Nö, ist schon berechtigt die Frage. Aber die Zugriffe auf Tuple sind identisch zu denen auf Listen, außer das man Tuplen noch Schlüssel zuweisen kann.
Worauf spielst Du da an? Schlüssel im Zusammenhang mit Tupeln sagt mir gar nichts. Ist das was neues bei der Version 2.2?

Jan

Verfasst: Dienstag 24. September 2002, 05:25
von RicmanX

Code: Alles auswählen

Zeit = time.localtime()
(jahr,monat,tag,stunde,minute,sekunde,wochentag,julian,daylight)=Zeit
In "Zeit" ist anfangs n Tuple mit 9 Zahlenwerten, dann werden Schlüssel/Variablen draufgesetzt.

Nun kann man über die Schlüssel auf die Werte zugreifen:

Code: Alles auswählen

>>> import time
>>> Zeit=time.localtime()
>>> (jahr,monat,tag,stunde,minute,sekunde,wochentag,julian,daylight)=Zeit
>>> jahr
2002
>>> stunde
6

Verfasst: Dienstag 24. September 2002, 08:20
von joerg
RicmanX hat geschrieben: ...Nun kann man über die Schlüssel auf die Werte zugreifen:...
Naja, Schlüssel würde ich das nicht nennen. Was Du meinst, ist das Entpacken von Sequenzen (Tupel, Liste und alles, was die entsprechenden Methoden implementiert hat) an Ort und Stelle auf neue Variablen. Das klappt genauso z.B. auch mit Listen!

Einen echten Zugriff über Schlüssel macht man mit Dictionaries a.k.a Hashtables.

Tupel können wirklich zu 100% als Read-Only-Listen aufgefaßt werden, weitere Unterschiede gibt es nicht.

Verfasst: Freitag 11. Oktober 2002, 19:04
von Dookie
Hallo,

mir scheint Ihr verkompliziert die ganze sache.
Ich greife mal das letzte Beispiel von RicmanX auf.

Code: Alles auswählen

Zeit = time.localtime()
(jahr,monat,tag,stunde,minute,sekunde,wochentag,julian,daylight)=Zeit
kann auch als:

Code: Alles auswählen

Zeit = time.localtime()
jahr, monat, tag, stunde, minute, sekunde, wochentag, julian, daylight = Zeit
geschrieben werden. Was IMHO klarer ist als mit den Klammern.


Gruß

Dookie