Seite 1 von 2

Dynamischer Vektor

Verfasst: Mittwoch 5. November 2008, 09:58
von Ingo
Hallo zusammen,
weiß jemand wie ich einen dynamischen Vector schreiben kann?
Also ich meine ich gebe dem Vector seine Dimesion vor.
Beispiel die größe soll 100 sein.

Verfasst: Mittwoch 5. November 2008, 10:13
von veers
Definiere "Vector" und was du mit dynamisch in dem Zusammenhang meinst. Vektor im Mathematik, oder in der Biologie, oder wie in der Informatik, ...?

Verfasst: Mittwoch 5. November 2008, 10:28
von sma
Was nun? Größe oder Dimension? Ein-Dimensional mit variabler Größe ist in Python die `list`, auch als `[...]` geschrieben. Variabeldimensional geht nicht. Feste Größe (und gleichzeitig änderbar) auch nicht.

Stefan

Verfasst: Mittwoch 5. November 2008, 10:30
von Ingo
also ich habe eine tabelle in messwerte stehen soll.
wenn ich schreiben [5]
dann steht der wert 5 in der ersten zeile der ersten spalte.
wenn ich jetzt [5,4]
dann steht in der ersten spalte in zeile 1 der wert 5 und in der zweiten spalte der wert 4.
jetzt möchte ich, das ich meinem programm sage dass ich 100 werte habe will. aber ich will nicht 100 mal [5,4,.......] schreiben.
also 100 sollen in meiner tabelle stehen.

Verfasst: Mittwoch 5. November 2008, 10:40
von Lonestar

Code: Alles auswählen


>>> vector = []
>>> for i in xrange(10):
	vector.append(i)

	
>>> vector
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 
meinst du sowas?

Verfasst: Mittwoch 5. November 2008, 10:40
von Redprince
Ich verstehe Dich nicht, aber ich habe derweil Lust zu raten:
Willst du n-Fach die Liste [5,4]?

Code: Alles auswählen

[5,4]*n
Oder willst du eine Liste mit n Elementen? Wenn ja, wo sollen die herkommen, wenn du sie nicht selbst eingeben willst?

Lonestar: siehe range(10) 8)

Verfasst: Mittwoch 5. November 2008, 10:52
von Lonestar
Redprince hat geschrieben: Lonestar: siehe range(10) 8)
guck, und hier verstehe ich dich nicht :wink:, ich wollte eigentlich auf das append raus. Die Listen sind doch schon von sich aus dynamisch

Verfasst: Mittwoch 5. November 2008, 11:17
von Ingo
ich habe folgendes problem:
mein messwert soll alle 2 sec gemessen werden mit meinem programm.
das heißt ich will jeden messwert der gemessen wurde in meiner tabelle stehen haben. also nicht immer die gleiche zahl sondern jeden messwert in eine neue zeile. ich möcht vorgeben 100 werte also muss er mir 100 zeilen mit dem jeweiligen messwert zeigen.

Verfasst: Mittwoch 5. November 2008, 11:23
von BlackJack
@Ingo: Wenn Du 100 Werte nacheinander in der "Tabelle" hinzufügst, dann ist die `append()`-Methode der richtige Ansatz, weil das eben eine dynamisch wachsende Liste ist.

Wenn Du am Ende 100 Einträge in der Liste stehen haben möchtest, aber gar nicht so viele Werte bekommst, müsstest Du eine Liste erzeugen, die mit 100 Werten gefüllt ist, zum Beispiel Nullen oder `None`. Das würde ich aber nur machen, wenn die Werte nicht nacheinander in der Liste stehen sollen oder aus irgend welchen Gründen nicht in der Reihenfolge rein kommen, in der sie in der Liste stehen sollen.

Edit: Also prinzipiell sähe das Lesen von 100 Werten dann so aus:

Code: Alles auswählen

    messwerte = list()
    for dummy in xrange(100):
        messwerte.append(lese_messwert())
        time.sleep(2)
Und wenn Dir *das* nicht klar ist, solltest Du unbedingt die Grundlagen lernen, bevor Du weiter machst. Am besten das Tutorial in der Python-Dokumentation durch arbeiten.

Verfasst: Mittwoch 5. November 2008, 12:03
von Ingo
was meinst du mit lese_messwert.
ich habe doch nur eine variable in der der messwert steht. diese variable wird vom nächsten messwert überschrieben.

Verfasst: Mittwoch 5. November 2008, 12:33
von BlackJack
Damit ist eine Funktion gemeint, die den nächsten Messwert liest. Wie auch immer Du das implementierst. Und so etwas brauchst Du ja, weil der Wert ja nicht alle zwei Sekunden auf magische Weise an einen Namen gebunden wird.

Verfasst: Mittwoch 5. November 2008, 13:03
von Ingo
alle 2 sec ist ein neuer messwert in der variable messwert.

Verfasst: Mittwoch 5. November 2008, 13:11
von BlackJack
Wie kommt der dort hin? Woher weisst Du das der Wert neu ist, bzw. wann er neu ist?

Und IMHO bist Du definitiv noch nicht so weit um Dich mit nebenläufiger Programmierung herum zu schlagen.

Verfasst: Mittwoch 5. November 2008, 13:38
von Ingo
Weil ich ein timer drin habe, der alle 2 sec den wert in die variable schreibt. ich schicke doch über ethernet mein commando raus und bekomme meine antwort. und ich sende genau alle sec mein commando und bekomme darauf hin meinen spannungsmesswert

Verfasst: Mittwoch 5. November 2008, 14:16
von BlackJack
Na dann hast Du ja eine Funktion, die alle zwei Sekunden aufgerufen wird. Und anstatt den immer an den gleichen Namen zu binden, musst Du ihn halt an eine Liste anhängen.

Verfasst: Mittwoch 5. November 2008, 14:36
von Ingo
Hast du ein kleines beispiel parat wie ich meinen messwert an einer liste anhänge?

Verfasst: Mittwoch 5. November 2008, 14:45
von BlackJack
Ja und das wurde sowohl von mir als auch davor schon von Lonestar gezeigt. Ein Objekt hängt man mit der `append()`-Methode an eine Liste an.

Bevor Du weiter programmierst, arbeite bitte das Tutorial durch. Sonst hat das wenig Sinn.

Verfasst: Mittwoch 5. November 2008, 15:19
von Ingo
Das habe ich auch alles probiert. nur das das rauskommt:
0
1
2
3
4
5
6
7
8
9
4,875
der wert 4,875 ist mein messwert der rest nicht. woran kann das nur liegen?

Verfasst: Mittwoch 5. November 2008, 15:29
von mkesper
Ingo hat geschrieben:der wert 4,875 ist mein messwert der rest nicht. woran kann das nur liegen?
Aufgrund des aktuellen Mangels an Kristallkugeln würde ich vermuten, dass es am fehlerhaften Programmcode liegt. 8)

Verfasst: Mittwoch 5. November 2008, 15:46
von BlackJack
Zuzüglich Unwillen sich mal hinzusetzen und die Grundlagen zu lernen, und vorgeschlagenen Quelltext nicht nur blind abzutippen, sondern auch zu verstehen, vermutet meine Kristallgugel. :?