Seite 1 von 3

Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 16:56
von Sophus
Hallo, wie ihr an meiner kleinen Übungsaufgabe seht lerne ich gerade den Umgang von Tuples und Dictionaries. In den Kommentaren schreibe ich für mich Informationen zu dem Thema rein, damit ich nicht alles auf einem Zettel schreiben muss, und ich es somit gleich präsent habe. Sollte also etwas falsch in meinem Kommentar sein, so könnt ihr gerne korrigieren, schließlich lerne ich dann es besser :-)

Kommen wir aber nun zu meinem Anliegen. Wie ihr in meinen Kommentaren sehen könnt weiß ich nun rein formal, dass Tuples unveränderbar und Dictionaries veränderbar sind. Nun stoße ich hier auf Verständnisfragen. Was meint hier "unveränderbar" und "veränderbar"? Ich meine, bei den Tulpes in Zeile 5 und Zeile 9 kann ich doch anstatt "Hallo Welt" sonstwas reinschreiben, somit habe ich es "verändert" so wie es bei Dictionaries der Fall wäre. Ihr seht, ich stehe momentan auf dem Schlauch.

Da ich ein blutiger Anfänger bin, bitte nicht zu hoch greifen.

Gruß
Sophus.

Code: Alles auswählen

# -*- coding: cp1252 -*-
#Tuples und Dictionaries sind zwei Arten von Arrays.
#Tuple ist ähnlich wie ein Array, er kann nicht verändert werden.
#Man kann kein Tuple löschen oder hinzufügen.
var = "Hallo", "Welt" #Hier beginnen wir einen Tuple zu definieren.
print var

#Man kann auch mit zwei Elementen nebeneinander arbeiten
var1, var2 = "Hallo", (", wie geht", "es dir?")
print var1, var2

#Jetzt zu den Dictionaries.
#Sie sind auch sehr ähnlich wie Arrays.
#Unterschied, sie gehen nicht von 0 bis 10,
#sondern, haben eigene Schlüssel und Werte.
#Man kann Dictionaries genauso definieren wie Variablen.
#Im Gegensatz zu Tuples sind Dictionaries veränderbar.
VarDict ={"Land":"Deutschland", "Sprache":"Deutsch"}
print VarDict #So ist es aber weniger nützlich.
print "Wir leben zur Zeit in " + VarDict["Land"] #Der Schlüssel "Land" wird hier aufgerufen.
												 #Der Schlüssel "Land" hat den Wert "Deutschland"
print "Ich spreche gerade " + VarDict["Sprache"]

#Eine kleine Funktion für die Dictionaries.
print len(VarDict) #Hier wird die Zahl 2 ausgegebn, weil ich zwei Schlüssel habe.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:19
von BlackJack
@Sophus: Tupel und Wörterbücher sind nicht zwei Arten von Arrays. Zumindest nicht wenn man den Begriff Array nicht anders definiert als er in Python und Sprachen wie C oder Java definiert ist. Am besten man verwendet den nicht allgemein, sondern nur für die konkreten Typen die in Python unter dem Namen bekannt sind, also vorranging Numpy-Arrays und deutlich weniger oft aus dem `array`-Modul aus der Standardbibliothek.

Üblicher wäre ganz allgemein von Container-Objekten zu sprechen und so wirklich ähnlich sind die sich eigentlich nicht, weil die Daten recht unterschiedlich organisiert sind. Tupel ist ein Sequenztyp der Elemente in einer geordneten Reihenfolge enthält und ein Wörterbuch ist ein Abbildungstyp der Schlüssel auf Werte abbildet, wo aber die Elemente keine garantierte Reihenfolge haben.

Zu Frage: Du kannst ein Tupel mit anderen Werten *erstellen*, aber Du kannst bei einem bereits erstellten Tupel kein Element durch ein neues ersetzen oder entfernen oder hinzufügen und damit das bestehende Tupel verändern. Bei bestehenden Wörterbüchern kann man dagegen neue Schlüssel/Wert-Paare hinzufügen, Werte zu bestehenden Schlüsseln ersetzen, und auch Schlüssel/Wert-Paare entfernen.

`len()` ist eine allgemeine Funktion mit der man die ”Länge” von Containerobjekten abfragen kann.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:24
von Hyperion
Sophus hat geschrieben: Kommen wir aber nun zu meinem Anliegen. Wie ihr in meinen Kommentaren sehen könnt weiß ich nun rein formal, dass Tuples unveränderbar und Dictionaries veränderbar sind. Nun stoße ich hier auf Verständnisfragen. Was meint hier "unveränderbar" und "veränderbar"? Ich meine, bei den Tulpes in Zeile 5 und Zeile 9 kann ich doch anstatt "Hallo Welt" sonstwas reinschreiben, somit habe ich es "verändert" so wie es bei Dictionaries der Fall wäre.
Du hast in Deinem Code bisher *kein* Objekt verändert, auch kein Dictionary ;-)

Beispiel:

Code: Alles auswählen

# Listen kennen z.B. "append"
l = [1, 2, 3]
# jetzt *verändern* wir das Objekt!
l.append(4)

print(l)
> [1, 2, 3, 4]

# Tupel haben nichts, um den Inhalt zu ändern!
t = (1, 2, 3)

# Dictionaries lassen sich auch erweitern:
d = {"foo": 42}
d["bar"] = 99
print(d)
> {'foo': 42, 'bar': 99}

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:30
von Sophus
Hallo,

mir ist das alles noch etwas zuhochgegriffen - zuviel Input auf einmal. Konzentrieren wir uns auf Tupel. Sie ist angeblich nicht veränderbar. Gut. Aber am Beispiel habe ich sie ja verändert:

Code: Alles auswählen

var1, var2 , var3 = "Hallo", (", wie geht", "es dir?"), ("Mir gehts gut.")
print var1, var2, var3
Hier habe ich var 3 einfach hinzugefügt - nach meinem Verständnis also veränderbar?

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:34
von Sophus
Entschuldige, ich verstehe nur Bahnhof. Schrieb ich nicht, dass ihr nicht zu hoch greifen solltet oder hab ich die Zeile vergessen? Ich will was lernen, und nicht das Gefühl haben, gerade wie ein Schimpanse jammernd nach einer Banane zu betteln.

Danke.

Gruß
Sophus
Hyperion hat geschrieben:
Sophus hat geschrieben: Kommen wir aber nun zu meinem Anliegen. Wie ihr in meinen Kommentaren sehen könnt weiß ich nun rein formal, dass Tuples unveränderbar und Dictionaries veränderbar sind. Nun stoße ich hier auf Verständnisfragen. Was meint hier "unveränderbar" und "veränderbar"? Ich meine, bei den Tulpes in Zeile 5 und Zeile 9 kann ich doch anstatt "Hallo Welt" sonstwas reinschreiben, somit habe ich es "verändert" so wie es bei Dictionaries der Fall wäre.
Du hast in Deinem Code bisher *kein* Objekt verändert, auch kein Dictionary ;-)

Beispiel:

Code: Alles auswählen

# Listen kennen z.B. "append"
l = [1, 2, 3]
# jetzt *verändern* wir das Objekt!
l.append(4)

print(l)
> [1, 2, 3, 4]

# Tupel haben nichts, um den Inhalt zu ändern!
t = (1, 2, 3)

# Dictionaries lassen sich auch erweitern:
d = {"foo": 42}
d["bar"] = 99
print(d)
> {'foo': 42, 'bar': 99}

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:41
von BlackJack
@Sophus: Mit nicht veränderbar ist gemeint das ein Tupel im laufenden Programm nicht verändert werden kann. Und das hast Du ja auch nicht gemacht. Wenn ein Tupel erstellt wurde, kann man es nicht mehr verändern (jedenfalls nicht ”legal”).

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:43
von MagBen

Code: Alles auswählen

a = [1,2,3] # eine list
a[1] = "X"
print( a ) # alles klar?

b = (1,2,3) # ein tuple
b[1] = "X" # Ueberaschung!

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:45
von Sirius3
@Sophus: Du hast Dein Programm verändert! Programme sind veränderbar. Wäre auch schlimm, wenn nicht, dann wären alle Programmierer arbeitslos.

PS: in Deinem Programm ist nur »var2« ein Tuple, »var1« und »var3« sind Strings.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:45
von Sophus
Ach so, es ging also um die Laufzeit?
Gut, dann bin ich schon mal einen Schritt weiter. Aber Hyperions Beispiel verstehe ich trotzdem nicht, er hätte auch chinesisch rückwärts schreiben können und ich wär genauso schlau wie vorher. Gibt es ein einfacheres Beispiel, damit ich das etwas verinnerlichen kann bzw um es zu verdeutlichen?

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:49
von Sirius3
In Hyperions Beispiel wird eine Liste erzeugt und verändert, ein Dictionary erzeugt und verändert, ein Tuple erzeugt und nicht verändert, weil das nicht geht. Die Zeilen die mit '>' anfangen sollen nur die Ausgaben repräsentieren.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:50
von Sophus
Sirius3 hat geschrieben:@Sophus: Du hast Dein Programm verändert! Programme sind veränderbar. Wäre auch schlimm, wenn nicht, dann wären alle Programmierer arbeitslos.

PS: in Deinem Programm ist nur »var2« ein Tuple, »var1« und »var3« sind Strings.
Weil dort Kommata fehlen, richtig? Denn zu den anderen vars ist bei var2 ein Komma vorhanden.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:51
von Sophus
Sirius3 hat geschrieben:In Hyperions Beispiel wird eine Liste erzeugt und verändert, ein Dictionary erzeugt und verändert, ein Tuple erzeugt und nicht verändert, weil das nicht geht. Die Zeilen die mit '>' anfangen sollen nur die Ausgaben repräsentieren.
Eine Liste? Du meinst, ein Array?

Genauso könnte ich auch schreiben:

Code: Alles auswählen


myArray = ['Mike','Peter','Anna']
print myArray[0] # Die Zählung beginnt bei Null. Mike wäre 0, Peter 1 und Anna 2

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:51
von Hyperion
Sophus hat geschrieben:Aber Hyperions Beispiel verstehe ich trotzdem nicht, er hätte auch chinesisch rückwärts schreiben können und ich wär genauso schlau wie vorher.
Was ist an meinem Beispiel denn nicht verständlich? Ich habe doch klar gezeigt, dass man einige Typen ändern kann und Tupel eben nicht. Ok, man hätte noch eine Zuweisung wie es MagBen gezeigt hat einbauen können, damit es noch klarer wird.

Im übrigen behandelt man doch niemanden wie einen Schimpansen, wenn man Dir ein recht langes Beispiel postet - das impliziert eigentlich, dass man sich Mühe gibt. Aber so langsam reicht es mit dann doch mit Deinem Tonfall und Deiner Art! :evil:

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:55
von EyDu
Sophus hat geschrieben:Eine Liste? Du meinst, ein Array?
Nein, wie es da steht. Eine Liste.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:56
von Hyperion
Sophus hat geschrieben: Eine Liste? Du meinst, ein Array?

Genauso könnte ich auch schreiben:

Code: Alles auswählen


myArray = ['Mike','Peter','Anna']
print myArray[0] # Die Zählung beginnt bei Null. Mike wäre 0, Peter 1 und Anna 2
Was Du hier verwendest sind Listen ;-) Arrays gibt es in Python auch, sind aber weniger gebräuchlich.

Gib mal in einer Shell ``type(myArray)`` ein ;-)

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:56
von Sophus
MagBens Beispiel habe ich auch gleich verstanden. Für mich war es eben einfach zu hoch gegriffen. Da hätte ich mir auch chinesische Bücher durchlesen können, und am Ende hätte ich mehr Fragen als Antworten. Mit anderen Worten, war es für mich keine Hilfe, weil du mir dadurch mehr Fragen aufgeworfen hast. Und das ist für mich keine Art von Hilfe. Aber trotzdem Danke für nichts - zumindest war es für mich nichts.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 17:58
von Sophus
Also augenscheinlich sehe ich keinen Unterschied zwischen meinem Array und der Liste - abgesehen dass dort andere Zeichen stehen.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 18:02
von EyDu
Sophus hat geschrieben:MagBens Beispiel habe ich auch gleich verstanden. Für mich war es eben einfach zu hoch gegriffen. Da hätte ich mir auch chinesische Bücher durchlesen können, und am Ende hätte ich mehr Fragen als Antworten. Mit anderen Worten, war es für mich keine Hilfe, weil du mir dadurch mehr Fragen aufgeworfen hast. Und das ist für mich keine Art von Hilfe. Aber trotzdem Danke für nichts - zumindest war es für mich nichts.
Wenn Hyperions Beispiel zu kompliziert für dich ist, dann fehlen dir absolute Grundlagen. Aber das willst du wohl wieder nicht einsehen. Auf meine Hilfe brauchst du in jeden Fall nicht mehr zählen, wer hier so dumm rumpöbelt und beleidigt, der will einfach keine Hilfe.

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 18:02
von Hyperion
Du hast ja immer noch nicht gesagt, *was* Du daran nicht verstanden hast! Ich habe dort ja kein Chinesisch, sondern Python und DEUTSCH geschrieben. ``append`` wirst Du ja hoffentlich übersetzen können und dann ist das, was es tut doch offensichtlich. Und die Zuweisung bei Dictionaries sollte Dir ja eigentlich schon begegnet sein - wenn nicht, hast Du sie nun gesehen. Was ist daran bitte schön unverständlich? Zumal das Beispiel von MagBen auch den Index-Operator verwendet... :roll:

Natürlich musst Du Dir auch mal eine Python-Shell aufmachen und Dinge ausprobieren, um sie nachvollziehen zu können! Ich vermute Du arbeitest bisher nicht mit einer Shell, sondern startest wirklich immer Programme, die Du im Texteditor getippt hast?

Falls ja, solltest Du das Starten und Bedienen der Python-Shell im offiziellen Tutorial noch mal angucken; das kommt iirc ganz zu Beginn vor.

Gerade solche "Spielereien" mit den grundlegenden Containern lernt man damit am besten!

Re: Tuples und Dictionaries

Verfasst: Freitag 6. Juni 2014, 18:04
von Hyperion
Sophus hat geschrieben:Also augenscheinlich sehe ich keinen Unterschied zwischen meinem Array und der Liste - abgesehen dass dort andere Zeichen stehen.
Ja, "augenscheinlich" siehst Du keinen Unterschied - in Python heißen diese Dinge mit eckigen Klammern aber nun einmal Listen! Und Arrays sind eben etwas anderes. Ich habe Dir dazu ja einen Link gegeben und dazu noch den Tipp mit dem ``type`` - der schreibt Dir das sogar hin!