Arrays -> Position zuweisen

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
Peter-
User
Beiträge: 40
Registriert: Dienstag 16. März 2021, 15:01

Hallo Zusammen,

ich hab jetzt einige Tutorials zum Thema Arrays geschaut und rumprobiert.
Es scheint, als wäre es in Python zwar möglich, auf eine Array Position direkt zuzugreifen (z. B. print x[3]), nicht aber sie direkt zuzuweisen (z. B. x[3]=0.5).
Hier mein Beispielcode, der so eine Zuweisung enthält, was es aber in Python nicht zu geben scheint:

Code: Alles auswählen

from array import *
x = array('f', [])
x['pos1']=4
print x['pos1']
Ich wäre darüber sehr verwundert, da es ja immer heißt, Python wäre so intuitiv und Code sei etwas robuster gegen Syntax Ungenauigkeiten im Vergleich zu anderen Sprachen. (Dann wäre wohl eher sowas wie das vergessen eines Strichpunkts am Zeilenende gemeint.)
Und dann würde so ein wichtiges Instrument fehlen? Will doch nicht jedes Mal durch-iterieren.
Hab ich da was übersehen? Gibt es vielleicht eine alternative Syntax mit gleichem Effekt?
So wie es jetzt wäre, würde mich so ein Python Array mehr an ein Zwischending zwischen Array und verketteter Liste erinnern.

Schöne Grüße,
Peter
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Du benutzt das Array eher wie ein Wörterbuch - das funktioniert nicht. Die Indices eines Arrays müssen Integer sein. Der Unterschied zu Listen besteht im Wesentlichen darin, dass der Typ festgelegt ist. Falls du Berechnungen durchführen willst, bieten sich numpy-Arrays an. Ich habe noch nie ein array.array verwendet. Entweder waren Listen, Wörterbüchter oder Numpy-Arrays das Mittel der Wahl.

Code: Alles auswählen

from array import array
foo = array("f", [0])
print(foo)
foo.append(2)
foo.append(3)
foo.append(12)
print(foo[0])
print(foo[1])
print(foo[2])
foo[2] = 100
print(foo)
bar = {"pos1": 0, "pos2": 3, 3: 10}
print(bar["pos1"])
print(bar["pos2"])
print(bar[3])
bar["pos1"] = 99
print(bar)
Die fehlenden Klammern um dein print deuten darauf hin, dass du Python 2.x verwendet. Das hat jedoch offiziell sein Lebensende erreicht und sollte gegen 3.x getauscht werden.
Benutzeravatar
Dennis89
User
Beiträge: 1555
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

das ist der ganze Code? Mal abgesehen davon das man keine *-Importe macht, was soll den der Index 'pos1' bewirken?

HIer mal die Doku zu 'array' da steht unter anderem was zu 'index' und insert':
https://docs.python.org/3/library/array.html

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Peter-
User
Beiträge: 40
Registriert: Dienstag 16. März 2021, 15:01

>das ist der ganze Code?

ja, so kurz wie möglich.


>Mal abgesehen davon das man keine *-Importe macht

ok, interessant.


>was soll den der Index 'pos1' bewirken?

Damit kannst Du ne menge cooler sachen machen, die die Software ziemlich smooth machen. direkte Zuweisung zum Array, mit lesbaren Variablennamen. Auch für mehrdimensionale Arrays sehr praktisch.

>HIer mal die Doku zu 'array' da steht unter anderem was zu 'index' und insert':
https://docs.python.org/3/library/array.html

danke
Peter-
User
Beiträge: 40
Registriert: Dienstag 16. März 2021, 15:01

einfachTobi hat geschrieben: Donnerstag 18. März 2021, 15:34 Du benutzt das Array eher wie ein Wörterbuch - das funktioniert nicht. Die Indices eines Arrays müssen Integer sein. Der Unterschied zu Listen besteht im Wesentlichen darin, dass der Typ festgelegt ist. Falls du Berechnungen durchführen willst, bieten sich numpy-Arrays an. Ich habe noch nie ein array.array verwendet. Entweder waren Listen, Wörterbüchter oder Numpy-Arrays das Mittel der Wahl.

Die fehlenden Klammern um dein print deuten darauf hin, dass du Python 2.x verwendet. Das hat jedoch offiziell sein Lebensende erreicht und sollte gegen 3.x getauscht werden.
Wowww... sehr cool. Vielen Dank!

> bar = {"pos1": 0, "pos2": 3, 3: 10}
print(bar["pos1"])

sehr cool dass das so geht. Ist es das was Du "Wörterbücher" genannt hast?
habs getestet, klappt.

Ja das mit Python 2.7 ist noch ein Problem. Ich brauche gelegentlich noch einen neuen Server mit 3.7. Überlege noch ob ich das mittelfristig lokal mache oder gleich bei einem neuen Provider für ein eventuelles MVP Projekt.
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

@Peter-: Falls Du von php kommst: ein Array in Python ist nicht identisch mit dem, was in php unter Array verstanden wird.

In Python funktioniert ein Array wie eine Liste, jedoch werden die Werte binär gespeichert, weswegen auch der Datentyp anzugeben ist. Listen sind dagegen flexibler: zwar sind sie intern auch Arrays, speichern aber Referenzen auf Objekte.

Deine (für Python fehlerhafte) Zuweisung an ein Array entspricht in Python der Nutzung eines Dictionaries. Verkettete Listen gibt es in Python übrigens auch, dies sind deque-Instanzen (doppelt verkettet).

Arrays in php funktionieren dagegen wie Dictionaries in Python, mit dem Unterschied, dass bei fortlassen eines keys ein numerischer Index als key verwendet wird. Das kann man machen, finde ich aber sehr unschön.

Und 'index' und 'insert' gibt es nicht nur für Arrays, sondern auch für Listen.
Peter-
User
Beiträge: 40
Registriert: Dienstag 16. März 2021, 15:01

@kbr

>Falls Du von php kommst: ein Array in Python ist nicht identisch mit dem, was in php unter Array verstanden wird.

Hab mal ein social network in PHP/MySQL programmiert und gelauncht, und noch andere umfangreiche Apps. War aber früher nur in Java unterwegs. Ein paar kleinere Sachen in C++ und C#, z. B. Software für Kryptographie. Python ist Neuland. Bin aber in erster Linie Kaufmann.


>In Python funktioniert ein Array wie eine Liste,

OK, verstehe. Aber mit der Codezeile von Dir, kann ich es ja wie es aussieht auch so verwenden wie in anderen sprachen.


>finde ich aber sehr unschön

XD


>entspricht in Python der Nutzung eines Dictionaries

ok, dann hatte ich das richtig vermutet dass das gemeint war.


nochmals vielen Dank für die Hilfe.
notallowed
User
Beiträge: 1
Registriert: Donnerstag 18. März 2021, 16:35

Peter- hat geschrieben: Donnerstag 18. März 2021, 15:03 ich hab jetzt einige Tutorials zum Thema Arrays geschaut und rumprobiert.
Es scheint, als wäre es in Python zwar möglich, auf eine Array Position direkt zuzugreifen (z. B. print x[3]), nicht aber sie direkt zuzuweisen (z. B. x[3]=0.5).
Hier mein Beispielcode, der so eine Zuweisung enthält, was es aber in Python nicht zu geben scheint:

Code: Alles auswählen

from array import *
x = array('f', [])
x['pos1']=4
print x['pos1']
da gibt es auch eine kuzform (falls Python 3.9 vorhanden):

Code: Alles auswählen

x=[]
x[3]=0.5
Antworten