Zugriff auf Tuples in PY

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

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???
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

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().
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

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!
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
RicmanX
User
Beiträge: 69
Registriert: Donnerstag 29. August 2002, 17:10
Wohnort: Erfurt
Kontaktdaten:

liste[anfang:ende]

Wenn je kein Anfang bzw. Ende ist geht der Zugriff entsprechend beim ersten los oder halt bis zum letzten.
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
RicmanX
User
Beiträge: 69
Registriert: Donnerstag 29. August 2002, 17:10
Wohnort: Erfurt
Kontaktdaten:

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.
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
RicmanX
User
Beiträge: 69
Registriert: Donnerstag 29. August 2002, 17:10
Wohnort: Erfurt
Kontaktdaten:

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
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

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.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Antworten