Seite 1 von 1

Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 19:00
von DerBorsti
Hallo zusammen

Ich habe folgende Daten:

Uhrzeit
Ziel
Verkehrsmittel

jedes dieser variablen ist eine Liste mit einzelnen Daten wobei alle 3 variablen die gleiche Anzahl an Elementen haben.
Nun möchte ich diese Verknüpfen mit einander - im Sinne von:

Einfacher Fall:
[Verkehrsmittel1, [ Ziel , [Uhrzeit , Uhrzeit,Uhrzeit]]]

Gleiches Verkehrsmittel aber unterschiedliche Ziele:
[Verkehrsmittel1 ,[ Ziel , [Uhrzeit , Uhrzeit,Uhrzeit]],[ Ziel2 , [Uhrzeit , Uhrzeit,Uhrzeit],......]

Nächstes Verkehrsmittel und weitere:
[Verkehrsmittel1 ,[ Ziel , [Uhrzeit , Uhrzeit,Uhrzeit]],[ Ziel2 , [Uhrzeit , Uhrzeit,Uhrzeit],......]
[Verkehrsmittel2 ,[ Ziel , [Uhrzeit , Uhrzeit,Uhrzeit]],[ Ziel2 , [Uhrzeit , Uhrzeit,Uhrzeit],......]
[..]

Der Hintergrund ist, dass ein Verkehrsmittel in einem bestimmten Takt bzw. Uhrzeit fährt und ich diese gerne alle zusammen hängen möchte(Einfacher Fall). Desweiteren kann das gleiche Verkehrsmittel ein anderes Ziel haben(Gleiches Verkehrsmittel aber unterschiedliche Ziele). Und zum Abschluss gibt es dann noch verschiedene Verkehrsmittel(Nächstes Verkehrsmittel und weitere).

Meine Frage nun - wie leg ich diesen Datensatz am sinnvollsten ab(an) in Python? Arraylist (Bezeichnung aus Java)? Arrays?


vielen Dank für jedliche Antworten

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 19:41
von Sirius3
Hallo DerBorsti,

wie Du die Datentruktur anlegst, wird vor allem dadurch bestimmt, wie Du auf die Daten zugreifen willst. Also entweder, so wie Du schon geschrieben hast als Listen von Listen oder als (in-memory) Sqlite-Datenbank, als Dictionaries, etc.

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 20:55
von kbr
@DerBorsti: noch als Ergänzung: Baue Deine Datenstruktur so auf, dass der Code einfach bleibt. Also lieber eine komplizierte Datenstruktur, als ein komplizierter Code.

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 21:43
von BlackJack
Als weitere Ergänzung: Wenn die Datenstruktur komplexer wird, dann sollte man von verschachtelten Grunddatentypen auf eigene Klassen umsteigen.

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 22:23
von DerBorsti
BlackJack hat geschrieben:Als weitere Ergänzung: Wenn die Datenstruktur komplexer wird, dann sollte man von verschachtelten Grunddatentypen auf eigene Klassen umsteigen.
Hey BlackJack
wieder einmal darf ich auf ein Kommentar von dir zählen - vielen dank !
Ich komme ein wenig aus der OOP von java / c++ denoch habe ich mir gedacht bei der großen Datenmenge die ich habe wären Objekte zu erstellen eher quatsch. Bin zu unerfahren in python damit - aber werde ich gleich mal nachschlagen!

kbr hat geschrieben:@DerBorsti: noch als Ergänzung: Baue Deine Datenstruktur so auf, dass der Code einfach bleibt. Also lieber eine komplizierte Datenstruktur, als ein komplizierter Code.
Hey kbr
^,^ klingt gut - nehme ich mir zu Herzen :)
Sirius3 hat geschrieben:Hallo DerBorsti,

wie Du die Datentruktur anlegst, wird vor allem dadurch bestimmt, wie Du auf die Daten zugreifen willst. Also entweder, so wie Du schon geschrieben hast als Listen von Listen oder als (in-memory) Sqlite-Datenbank, als Dictionaries, etc.
Hey Sirius3
Stimmt absolut! Hätte ich vielleicht erwähnen sollen .... Ich möchte später ein Abfahrts Diagramm machen ... X - Achse soll die Uhrzeit sein und dann mit Farben variert Striche ziehen wo bzw. wann ein Verkehrsmittel (typ) abfährt. in-memory und Dictionaries sagt mir spontan nichts aber klasse - da hab ich mal ein wort wonach ich googeln kann.



Vielen dank allen für eure Kommentare

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 22:27
von /me
DerBorsti hat geschrieben:in-memory und Dictionaries sagt mir spontan nichts aber klasse - da hab ich mal ein wort wonach ich googeln kann.
Dictionaries kommen im offiziellen Tutorial recht früh vor: http://docs.python.org/2/tutorial/datas ... ctionaries.

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 22:33
von BlackJack
@DerBorsti: Wenn Dir Dictionary nichts sagt, dann solltest Du vielleicht mal ein Grundlagentutorial durcharbeiten, bevor Du an Deinem konkreten Problem weiterarbeitest. Den Tipp hätte man vielleicht auch schon bei der Ausgangsfrage geben sollen, denn Arrays gibt es auch nicht als Grunddatentyp in Python. Der Sequenzdatentyp ist die Liste. Und der Datentyp `list` in Python entspricht vom Laufzeitverhalten in etwa dem Datentyp `ArrayList` aus Java.

Objekte zu erstellen ist in Python unumgänglich: *Alles* was man an einen Namen binden kann, ist in Python ein Objekt. Es geht also gar nicht ohne das erstellen von Objekten.

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 22:33
von DerBorsti
/me hat geschrieben:
DerBorsti hat geschrieben:in-memory und Dictionaries sagt mir spontan nichts aber klasse - da hab ich mal ein wort wonach ich googeln kann.
Dictionaries kommen im offiziellen Tutorial recht früh vor: http://docs.python.org/2/tutorial/datas ... ctionaries.
Hey /me
ja vielen Dank - habs mir auch gerade angesehen. Das Problem das ich für meinen Fall jedoch an diesem Beispiel sehe, dass Dictionaries nur von einem Key abhänig sind. ( Bitte korregiert mich - habe mir bis jetzt nur das Beispiel unter dem Text angeschaut) Ich hätte aber zwei sogenannte "Key" 1.Verkehrsmittel 2. Ziel

Aber mal sehen vllt muss ich diesen Beitrag auch gleich editieren - ich spiel da mal eben mit rum
BlackJack hat geschrieben:@DerBorsti: Wenn Dir Dictionary nichts sagt, dann solltest Du vielleicht mal ein Grundlagentutorial durcharbeiten, bevor Du an Deinem konkreten Problem weiterarbeitest. Den Tipp hätte man vielleicht auch schon bei der Ausgangsfrage geben sollen, denn Arrays gibt es auch nicht als Grunddatentyp in Python. Der Sequenzdatentyp ist die Liste. Und der Datentyp `list` in Python entspricht vom Laufzeitverhalten in etwa dem Datentyp `ArrayList` aus Java.

Objekte zu erstellen ist in Python unumgänglich: *Alles* was man an einen Namen binden kann, ist in Python ein Objekt. Es geht also gar nicht ohne das erstellen von Objekten.
Okay da magst du sicherlich Recht haben, aber ich zähle zu den Menschen die lieber erstmal am Code rumspielen wenn man grob eine Idee hat ;)
Puh einiges zu lesen aber ich werd es jetzt mal tun

Vielen Dank erneut

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 22:45
von cofi
DerBorsti hat geschrieben:Das Problem das ich für meinen Fall jedoch an diesem Beispiel sehe, dass Dictionaries nur von einem Key abhänig sind. ( Bitte korregiert mich - habe mir bis jetzt nur das Beispiel unter dem Text angeschaut) Ich hätte aber zwei sogenannte "Key" 1.Verkehrsmittel 2. Ziel
Je nach deinem Problem / deiner gewuenschten Abfrageart kannst du entweder die Schluessel kombinieren und `(Verkehrsmittel, Ziel)` (also das 2-Tupel) benutzen oder Dictionaries verschachteln und die Schluessel sequentiell benutzen.
Das ist also kein Hinderungsgrund.

Wenn du etwas mehr ueber die (erwarteten) Zugriffsmuster erzaehlst, koennen wir dir da noch weiterhelfen.

Re: Array List oder reicht ein Array

Verfasst: Donnerstag 7. März 2013, 23:24
von BlackJack
@DerBorsti: Man kann doch aber nicht sinnvoll mit Code herum spielen wenn man die Grundbausteine dafür überhaupt gar nicht kennt‽ Und dazu gehört neben den Schlüsselworten und der Syntax auch alles was man ohne zu importieren benutzen kann.

Re: Array List oder reicht ein Array

Verfasst: Freitag 8. März 2013, 00:29
von DerBorsti
BlackJack hat geschrieben:@DerBorsti: Man kann doch aber nicht sinnvoll mit Code herum spielen wenn man die Grundbausteine dafür überhaupt gar nicht kennt‽ Und dazu gehört neben den Schlüsselworten und der Syntax auch alles was man ohne zu importieren benutzen kann.
:D wo ein wille - dort ein weg :D

so habs gelöst.....
Als Beispiel für eine kommende Generation - so macht man es nicht aber es geht :=)

Code: Alles auswählen

class Verkehrsmittel:
    def __init__(self):
       self.verkehrsmittel=[]
       self.ziel =[]
       self.uhrzeit = []
[..]
gefunden=0
i=0
fahrzeug_array= []
fahrzeug = Verkehrsmittel()
while(i<len(verkehrsmittel)):
    if (i==0):
        fahrzeug.verkehrsmittel.append(verkehrsmittel[0])
        fahrzeug.ziel.append(ziel[0])
        fahrzeug.uhrzeit.append(uhrzeit[0])
        fahrzeug_array.append(fahrzeug)
    else:    
        for h in fahrzeug_array:
            if(verkehrsmittel[i]==h.verkehrsmittel) and (ziel[i]==h.ziel)):
    ##            print "verkehrsmittel doppelt "+ "ziel doppelt"
                h.uhrzeit.append(uhrzeit[i])
                gefunden=1
                
        if(gefunden==0):
        ##  print "neues verkehrsmittel bzw. wohlmöglich gleiches Verkehrsmittel nur neues Ziel"
            fahrzeug = Verkehrsmittel()
            fahrzeug.verkehrsmittel.append(verkehrsmittel[i])
            fahrzeug.ziel.append(ziel[i])
            fahrzeug.uhrzeit.append(uhrzeit[i])
            fahrzeug_array.append(fahrzeug)

    i=i+1
    gefunden=0


[..]
##ausgabe 
for a in fahrzeug_array:
    print a.verkehrsmittel
    print a.ziel
    print a.uhrzeit

ich bin mir absolut sicher dass sich einige python leser hier sich nun die haare rausreißen - aber bitte verzeiht mir ( Der Code ist leicht zur verständnis verändert) es funktioniert so und das reicht mir erstmal.



Noch einmal vielen vielen Dank für die oberen Kommentare !!!! Durch diese bin ich auf die Idee gekommen

Re: Array List oder reicht ein Array

Verfasst: Freitag 8. März 2013, 02:19
von BlackJack
@DerBorsti: Ich frage mich gerade ernsthaft ob Du ein Troll bist oder was Du Dir dabei gedacht hast hier nach Rat zu fragen den Du sowieso ganz bewusst nicht verwenden willst. Warum schreibst Du Python-Quelltext, wenn Du ganz offensichtlich überhaupt nicht Python verwenden willst? Der Quelltext könnte kaum „unpythonischer” aussehen wenn man ihn mit Absicht so unschön und umständlich wie möglich schreiben würde.

Wenn das aufgrund der Kommentare entstanden ist, dann hast Du die nicht gelesen oder nicht verstanden.

Die Lösung ist nämlich auch algorithmisch schlecht, wäre es also in äquivalenter Form auch in C++ oder Java. Zum einen die Wahl der falschen Sprachmittel (``while`` mit Index statt ``for`` über die Elemente), dann der falschen Datenstrukturen und -typen (lineares durchsuchen von Listen statt Direktzugriff über Wörterbücher, `int` statt `bool`), und auch was die unnötige Komplexität durch die Sonderbehandlung von ``i == 0`` angeht. Das `verkehrsmittel`, `ziel`, und `uhrzeit` drei parallele Listen mit jeweils elementweise zusammengehörenden Daten sind, spricht auch nicht für einen durchdachten Entwurf.

Ich glaube auch nicht dass das überhaupt so funktioniert, denn es scheint da werden Objekte mit Listen mit einem einzigen Objekt als Inhalt verglichen was natürlich immer `False` ist.

Re: Array List oder reicht ein Array

Verfasst: Freitag 8. März 2013, 21:01
von DerBorsti
BlackJack hat geschrieben:@DerBorsti: Ich frage mich gerade ernsthaft ob Du ein Troll bist oder was Du Dir dabei gedacht hast hier nach Rat zu fragen den Du sowieso ganz bewusst nicht verwenden willst. Warum schreibst Du Python-Quelltext, wenn Du ganz offensichtlich überhaupt nicht Python verwenden willst? Der Quelltext könnte kaum „unpythonischer” aussehen wenn man ihn mit Absicht so unschön und umständlich wie möglich schreiben würde.

Wenn das aufgrund der Kommentare entstanden ist, dann hast Du die nicht gelesen oder nicht verstanden.

Die Lösung ist nämlich auch algorithmisch schlecht, wäre es also in äquivalenter Form auch in C++ oder Java. Zum einen die Wahl der falschen Sprachmittel (``while`` mit Index statt ``for`` über die Elemente), dann der falschen Datenstrukturen und -typen (lineares durchsuchen von Listen statt Direktzugriff über Wörterbücher, `int` statt `bool`), und auch was die unnötige Komplexität durch die Sonderbehandlung von ``i == 0`` angeht. Das `verkehrsmittel`, `ziel`, und `uhrzeit` drei parallele Listen mit jeweils elementweise zusammengehörenden Daten sind, spricht auch nicht für einen durchdachten Entwurf.

Ich glaube auch nicht dass das überhaupt so funktioniert, denn es scheint da werden Objekte mit Listen mit einem einzigen Objekt als Inhalt verglichen was natürlich immer `False` ist.
Okay nehme ich jetzt mal so hin - Ich bin immer offen für Kritik und geb mein bestes beim nächsten mal bzw. bei der Überarbeitung.
-Bool und Int -> ja stimmt vollkommen ....
-Sonderbehandlung hätte man auch ausserhalb machen können ;)
-"lineares durchsuchen von Listen statt Direktzugriff über Wörterbücher" - ich habe festgestellt, dass mein Datensatz maximal 30 Einträge sind aber ja auch hier hast du recht.
-Durchdachten Datenentwurf: hmm dies war ja meine Ausgangsfrage - ich habe es nun erstmal so gelöst, aber werde es noch einmal komplett überarbeiten
Der Gedanke an diesem Code ist folgender ->
Ich habe n Anzahl an Objekten von Typ Verkehrsmittel die ich in ein Array schreibe. Jedes Verkehrsmittel hat / kann n Ziele und n Uhrzeiten für Abfahrt/Ankunft haben.

Korrekt - der so dargestelle Quellcode funktioniert nicht - würdest du / ihr sehen wie ich die Strings bearbeite würdest du mir sicher empfehlen Python zu löschen :D ... Es ist sicher nicht lustig, aber ich freue mich über meinen Erfolg es im wahrsten Sinne des Wortes "irgendwie" hinbekommen zu haben - nun gehts daran dies zu überarbeiten... Ich würde sogar ggf. dies hier erneut reinstellen falls du nicht als mod sagst "sowas möchten wir hier nicht sehen"

Beste Grüße

€dit
Ich möchte noch einmal betonen, dass ich die Kommentare wirklich zu herzen genommen habe und auch wirklich die angegeben Stichwörter recheriert habe. Das ich nun aber jetzt diese erstmalige Lösung gefunden habe und somit gegen jedes Kommentar verstosse tut mir leid !

Re: Array List oder reicht ein Array

Verfasst: Samstag 9. März 2013, 00:43
von BlackJack
@DerBorsti: Die Sonderbehandlung bei i=0 hätte man komplett weglassen können, ohne dass sich etwas am Ergebnis ändern würde. Denn das ist ja genau der Code der ausgeführt wird wenn bei i=0 in `fahrzeug_array` kein Suchtreffer erfolgt. Und das sollte man als sicher ansehen können wenn `fahrzeug_array` leer ist.

Mal davon abgesehen das Typen nicht in Namen verwendet werden sollten, weil es gar nicht so selten ist, dass man den Typen ändert und dann entweder der Name irreführend ist, oder überall geändert werden müsste, ist das eine Liste und kein Array. Arrays gibt es unter den Grundatentypen von Python nicht, und wenn man in Python von Arrays spricht ist damit in den allermeisten Fällen der Datentyp aus dem `numpy`-Paket gemeint.

Nur mit den Grundatentypen und `collections.defaultdict` sollte sich die ``while``-Schleife mit drei Zeilen ausdrücken lassen.

Re: Array List oder reicht ein Array

Verfasst: Samstag 9. März 2013, 10:07
von Sirius3
In Code sagt mehr als tausend Worte:

Code: Alles auswählen

import collections
[..]
fahrplan = zip(verkehrsmittel,ziel,uhrzeit) # keine drei Listen, sonder nur eine!
fahrzeug_array = collections.defaultdict(list)
for verkehrsmittel,ziel,uhrzeit in fahrplan:
    fahrzeug_array[verkehrsmittel,ziel].append(uhrzeit)
[..]
##ausgabe 
for (verkehrsmittel,ziel),uhrzeit in fahrzeug_array.iteritems():
    print verkehrsmittel
    print ziel
    print uhrzeit
Die Variablennamen habe ich unangetastet gelassen, um sie wiederzuerkennen.