set als array ?

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.
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

hallo,

ich benötige eine minimale array-funktion, einfach nur mit index zugreifbare elemente.
deshalb verzichte ich auf numpy.

wenn ich das grob mit einem set mache :

a = {}
a[9]=3
a[2]=3
a[1]=a[2]+a[9]
print (a[1])

tut das eigentlich alles, was ich brauche.
klar ist das kein array, aber mehr brauche ich nicht, der index funktioniert.
die definition ist einfacher als bei ner liste.

spricht was dagegen ? (bitte nicht steinigen ;-)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da geht aber eine Menge durcheinander. Weder ist das ein Set, noch ein Array. Was du da hast ist ein Dictionary bzw. Woerterbuch, und das ist einer wenn nicht der zentralste aller Python Datenstrukturen.

Nichts spricht dagegen, den zu benutzen.
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

Ok, den Unterschied set/Menge zu Dictionary hab ich wohl nicht so recht kapiert.

Ich kann das nutzen wie ein Array, solange ich nur die Funktion brauche, Elemente per Index anzusprechen (in Schleifen z.b.) ?
Benutzeravatar
noisefloor
User
Beiträge: 4185
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

und wenn es ein Set wäre würde der Index-Zugriff nicht funktionieren, weil Sets das nicht unterstützen.

Ein array ist in Python eine eigene Datenstruktur, die im `array` Modul untergebracht ist. Braucht man in Python auch eher selten, da man normalerweise mit Listen oder zum Rechnen mit numpy-Arrays arbeitet.

Gruß, noisefloor
Benutzeravatar
noisefloor
User
Beiträge: 4185
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Nachtrag:
Elemente per Index anzusprechen (in Schleifen z.b.) ?
Kann man mit Listen, ist aber in Python in der Regel ein Anit-Pattern, weil man in Python direkt über Listen iterieren kann, ohne Index-Zugriff.

Gruß, noisefloor
Sirius3
User
Beiträge: 18260
Registriert: Sonntag 21. Oktober 2012, 17:20

Ob etwas dagegen spricht, hängt davon ab, was Du damit machen möchtest.
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

Ich brauche keine Matrixmultiplikation oder solche Dinge, also kein wirkliches array.
Ich möchte nur mit Indizes auf Werte (int/float) zugreifen können, um komfortabel z.b. Sortieraufgaben zu lösen.

Sowohl im Dictionary als auch in der Liste scheitn das ja zu funktionieren, bei der Liste ist die Definition umständlicher wenn sie mehr Elemente hat.
Sirius3
User
Beiträge: 18260
Registriert: Sonntag 21. Oktober 2012, 17:20

Normalerweise macht man etwas falsch, wenn man direkten Zugriff auf einen Index braucht.
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

Das versteh ich nicht.
Wenn ich jetzt z.b einen Sortierklassiker schreib, sagen wir bubblesort oder so, dann muß ich zwei Werte vergleichen, also irgendwie :

Code: Alles auswählen

  if a[i]>a[i+1] :    
oder so ähnlich.
Was ist daran falsch ?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das du den schreibst, statt den eingebauten sort zu nutzen.
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Und selbst, wenn man das zu Übungszwecken selbst schreibt, würde man in dem Fall eien Liste nehmen - und kein Wörterbuch um die Index-Zugriffe auf eine Liste zu imitieren.
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

na ja, es geht darum, programmieren zu lernen, und nicht tolle Funktionen anzuwenden.
man muß erst mal verstehen, was ein Index ist, und Schleifen schreiben und so weiter und so weiter ....

Aber für mich wichtiger : warum hier eine Liste und kein Dictionary, wenns doch den Zweck erfüllt ?
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Warum etwas umständlich in ein dictionary packen, nur um die Funktionalität abzubilden, die essentiell für Listen ist?

Code: Alles auswählen

>>> a = [1, 2, 3, 4]
>>> print(a[0] + a[3])
5
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

Nun, wenn ich die Werte erst einlesen möchte, ist das Dictionary eher praktischer (weil die Definition kürzer ist).
Aber ich seh schon : es tut was ich will, und kann als Werkzeug für Spiele mit Indizes verwendet werden.

Danke für eure Geduld mit meinen "Milchmädchenfragen" !
Sirius3
User
Beiträge: 18260
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie willst Du denn die Werte einlesen? Normalerweise hat man ja die in einer Reihenfolge und nicht beliebig.
Ich frage mich auch, warum Du so sehr lernen willst, wie man mit Indizes arbeitet, wenn das in Python unüblich ist?
Benutzeravatar
noisefloor
User
Beiträge: 4185
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was du "Index" nennst, ist der Schlüssel (auf englisch: key) deines Dictionaries. Und Bubblesort für eine Dict machen ist auch Quatsch, weil man auf Dicts mittels Schlüssel zugreift. Mal abgesehen davon, das Dicts erst ab Python 3.7 die Einfügereihenfolge behalten.

Am besten liest du im Python-Tutorial nochmal gründlich den Teil zu Datentypen und -strukturen. Ohne, dass die Listen, Dict & Co verstanden hast, kannst du nie vernünftig in Python programmieren.

Gruß, noisefloor
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

Es geht nicht darum, Python zu lernen.

Es geht darum, einen Einstieg in die Entwicklung einfachster Algorithmen zu machen. Also grundsätzliche Dinge wie das Verständnis (oder die Übung), ob man eine Schleife oder eine bedingte Ausführung braucht. Oder eben, was ein Index ist. Ein Beispiel für typische Aufgaben : eine Iteration nach einer Nullstelle.

Python nur, weil in dem Kontext in dem ich mich bewege, Python eben sehr angesagt ist.
Und auf dem Einsteiger-Niveau ist es doch praktisch egal, welche Sprache ...

Aber wie gesagt : ich danke euch für den Crash-Einsteig in Listen, Dictoinaries und co, und natürlich werde ich nachlesen !
Benutzeravatar
noisefloor
User
Beiträge: 4185
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

deine Einstellung ist falsch. Wenn du Sprache mit Sprache $FOO progammierst und dessen Ideome ignorierst, programmierst du gegen die Sprache $FOO . Und das ist halt falsch und die lernst falsch.

Klar funktionieren Algorithmen wie Bubble Sort mit allen Programmiersprache - aber WIE du das umsetzt ist halt unter Python anders als unter C als unter Go als unter JavaScript als unter ...

Gruß, noisefloor
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

@reinerdoll: Die Programmiersprache ist schon wichtig - denn du versuchst gegen sie zu progammieren. In die Richtung gingen auch schon andere Beiträge von dir. Auf diese Weise hat man leider selten Erfolg. Der Trick besteht darin, die Werkzeuge zu verstehen, die man benutzt. Aber da du ja sehr genau weißt, was du willst: Viel Erfolg ;)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich sehe das jetzt anders als meine Vorredner, es ist schon ok, wenn man zum lernen eines Algorithmus den selbst umsetzt.

Wo ich mich aber mit Nachdruck anschliesse ist die Wahl der Datenstruktur. Ein Woerterbuch IST KEIN ARRAY bzw. allgemeiner Sequenz. Das waere in Python standardmaessig die Liste, und die solltest du auch dringend benutzen.
Antworten