Dynamischer Vektor
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.
Bevor Du weiter programmierst, arbeite bitte das Tutorial durch. Sonst hat das wenig Sinn.
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Aufgrund des aktuellen Mangels an Kristallkugeln würde ich vermuten, dass es am fehlerhaften Programmcode liegt.Ingo hat geschrieben:der wert 4,875 ist mein messwert der rest nicht. woran kann das nur liegen?
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.
-
- User
- Beiträge: 120
- Registriert: Montag 4. Juni 2007, 19:19
Du hast eine Liste mit range(10) erzeugt and dann 4,875 als elftes Element drangehängt.Ingo hat geschrieben: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?
Ich hab auch nicht wirklich eine Ahnung, was du tun willst ... die Liste soll immer 100 Elemente haben und bei Bedarf die ältesten (die obersten) rauswerfen?
ich vermute auch mal das liegt am Quellcode
vielleicht solltest du deinen Versuch hier mal posten - evtl erbarmt sich noch jemand und hilft dir.
[edit]
... aber ich schmeiss mich in die Ecke wenn das der Fehler ist den ich gerade vermute ...
[/edit]
vielleicht solltest du deinen Versuch hier mal posten - evtl erbarmt sich noch jemand und hilft dir.
[edit]
... aber ich schmeiss mich in die Ecke wenn das der Fehler ist den ich gerade vermute ...
[/edit]
-
- User
- Beiträge: 120
- Registriert: Montag 4. Juni 2007, 19:19
Ich rate einfach weiter ... was Du tun kannst ist immer weiter anhängen, und bei jedem Durchlauf die Länge der Liste abfragen.
Damit wird der älteste Wert (Index 0) weggeschmissen und die Liste ist wieder 100 Elemente lang.
Code: Alles auswählen
...
dyn_vektor.append(dein_messwert)
...
if len(dyn_vektor) == 101:
dyn_vektor = dyn_vektor[1:101]
...
Für den Fall wäre wohl eine `collections.deque` eine bessere Wahl. Natürlich am besten in eine eigene Klasse verpackt.
-
- User
- Beiträge: 120
- Registriert: Montag 4. Juni 2007, 19:19
Lässt sich da die Länge fixieren?
Nein, deswegen ja die eigene Klasse. Ungetestet:
Code: Alles auswählen
class BoundedQueue(object):
def __init__(self, max_length):
self.max_length = max_length
self.data = collections.deque()
def __len__(self):
return len(self.data)
def __iter__(self):
return iter(self.data)
def append(self, value):
self.data.append(value)
if len(self) > self.max_length:
self.data.popleft()
Ich glaube, der OP kommt aus der C-Welt und kann sich einfach nicht vorstellen, daß die Dinge so einfach sein können, wie Python sie macht.
Also ich habe eine schleife in der zuerst nach einem messwert gefragt wird. ich bekomme den messwert. dieser messwert wird in der tabelle angezeigt. die schleife ist nun zu ende. sie beginnt von vorne und fragt wieder nach dem messwert ich bekommen den messwert dieser soll in einer neuen zeile angezeigt werden. der vorherige messwert ist eine zeile oben drüber. ich bestimme wie oft die schleife durchläuft und bestimme dadurch die anzahl meiner messwerte. aber wie kann ich immer den aktuellsten messwert in die neue zeile bringen?
@Ingo:
Einige sehr bemühte Menschen raten hier um die Wette, was genau dein Problem ist, warum es nicht so funktioniert, wie du es gerne hättest und geben dir hilfreiche Tipps.
Warum zeigst du nicht einfach mal den Code, der das machen soll, was du gerne hättest, aber es nicht tut. Dann wäre das Problem wahrscheinlich ruckzuck gelöst!
Einige sehr bemühte Menschen raten hier um die Wette, was genau dein Problem ist, warum es nicht so funktioniert, wie du es gerne hättest und geben dir hilfreiche Tipps.
Warum zeigst du nicht einfach mal den Code, der das machen soll, was du gerne hättest, aber es nicht tut. Dann wäre das Problem wahrscheinlich ruckzuck gelöst!
-
- User
- Beiträge: 120
- Registriert: Montag 4. Juni 2007, 19:19
Du solltest wirklich versuchen dein Problem vernünftig zu formulieren.
Du kannst neue Messwerte mit "append" anhängen. Eigentlich genauso wie in deinem "[0,1,2,3,4,5,6,7,8,9,4.875]"-Beispiel. Was passt dir daran nicht?
Leere Listen erzeugst mit
Mit Nullen gefüllt und 100 Elemente lang: z.B.:
Du kannst neue Messwerte mit "append" anhängen. Eigentlich genauso wie in deinem "[0,1,2,3,4,5,6,7,8,9,4.875]"-Beispiel. Was passt dir daran nicht?
Leere Listen erzeugst mit
Code: Alles auswählen
dyn_vektor = list()
Code: Alles auswählen
dyn_vektor = [0] * 100
Hallo,
erstmal noch etwas zum Hintergrund bzgl. "dynamischer Vektoren":
In C und C++ muß man den Speicher selbst verwalten.
Statische, also unveränderbare Arrays (Felder, Vektoren) (vergleichbar Python-Tuplen (die erstmal nur ganze Zahlen enthalten, bei Strings wird's schon wieder schwieriger)), sind dabei nicht so problematisch, weil ihr Speicherbedarf bei Deklaration, bzw. Initialisierung bekannt ist.
Wenn man an eine dynamische Liste etwas anhängt, verändert sich aber ihr Speicherbedarf. Das muß der C/C++-Programmierer berücksichtigen, oder es entstehen Speicherlecks usw..
Es gibt mehrere Möglichkeiten, dynamische Listen in C/C++ zu programmieren. Je nachdem können z.B. Suchoperationen in verschiedenen Listentypen schneller oder langsamer sein usw..
In der "Standard Template Library" (STL) von C++ gibt es z.B. die Listentypen "vector", "deque" und "list":
http://www.c-plusplus.de/forum/viewtopi ... 43816.html
Soweit ich weiß, gibt es in C so ein praktische Standardbibliothek für Listen nicht. Offenbar wird erwartet, daß der Programmierer sie selbst implementiert. Immerhin gibt es hier
http://freshmeat.net/projects/libhx/
eine C-Bibliothek, die sich daran versucht.
In Python wird die Implementation der Listen vom Programmierer absichtlich ferngehalten. Diese Ebene ist bereits im Python-Interpreter fertiggestellt.
Das ist einer der wesentlichen Gründe, warum die Programmierung mit Python im Verhältnis so schnell und angenehm ist.
Dies ist jedoch auch einer der Gründe, warum Python-Code in der Regel insgesamt etwas langsamer abläuft als C-Code.
Viele Grüße
erstmal noch etwas zum Hintergrund bzgl. "dynamischer Vektoren":
In C und C++ muß man den Speicher selbst verwalten.
Statische, also unveränderbare Arrays (Felder, Vektoren) (vergleichbar Python-Tuplen (die erstmal nur ganze Zahlen enthalten, bei Strings wird's schon wieder schwieriger)), sind dabei nicht so problematisch, weil ihr Speicherbedarf bei Deklaration, bzw. Initialisierung bekannt ist.
Wenn man an eine dynamische Liste etwas anhängt, verändert sich aber ihr Speicherbedarf. Das muß der C/C++-Programmierer berücksichtigen, oder es entstehen Speicherlecks usw..
Es gibt mehrere Möglichkeiten, dynamische Listen in C/C++ zu programmieren. Je nachdem können z.B. Suchoperationen in verschiedenen Listentypen schneller oder langsamer sein usw..
In der "Standard Template Library" (STL) von C++ gibt es z.B. die Listentypen "vector", "deque" und "list":
http://www.c-plusplus.de/forum/viewtopi ... 43816.html
Soweit ich weiß, gibt es in C so ein praktische Standardbibliothek für Listen nicht. Offenbar wird erwartet, daß der Programmierer sie selbst implementiert. Immerhin gibt es hier
http://freshmeat.net/projects/libhx/
eine C-Bibliothek, die sich daran versucht.
In Python wird die Implementation der Listen vom Programmierer absichtlich ferngehalten. Diese Ebene ist bereits im Python-Interpreter fertiggestellt.
Das ist einer der wesentlichen Gründe, warum die Programmierung mit Python im Verhältnis so schnell und angenehm ist.
Dies ist jedoch auch einer der Gründe, warum Python-Code in der Regel insgesamt etwas langsamer abläuft als C-Code.
Viele Grüße
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nunja, ganz so schlimm ist es nicht, denn mit der GLib gibt es durchaus eine Library für C die einem lästige Dinge abnimmt. Wenn man bedenkt, dass Programme wie irssi dasnutzen und GLib die Grundlage von GTK+ ist (und auch eigentlich von dort stammt), welches von vielen, vielen Programmen genutzt wird dann kann man durchaus von "populär" sprechen. Wer mehr Syntaktischen Zucker braucht, kann sich an dieser Stelle auch Vala ansehen, eine Sprache die zu C+GLib (GObject) kompiliert wird.abgdf hat geschrieben:Soweit ich weiß, gibt es in C so ein praktische Standardbibliothek für Listen nicht. Offenbar wird erwartet, daß der Programmierer sie selbst implementiert. Immerhin gibt es hier
http://freshmeat.net/projects/libhx/
eine C-Bibliothek, die sich daran versucht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack hat geschrieben:Für den Fall wäre wohl eine `collections.deque` eine bessere Wahl. Natürlich am besten in eine eigene Klasse verpackt.
ichbinsisyphos hat geschrieben:Lässt sich da die Länge fixieren?
Mir spuckt die Doku diese Signatur aus: ``collections.deque([iterable[, maxlen]])`` - reicht das nicht?BlackJack hat geschrieben:Nein, deswegen ja die eigene Klasse.
Sag uns doch mal, was du mit Tabelle, anzeigen und neuer Zeile meinst.Ingo hat geschrieben:Also ich habe eine schleife in der zuerst nach einem messwert gefragt wird. ich bekomme den messwert. dieser messwert wird in der tabelle angezeigt. die schleife ist nun zu ende. sie beginnt von vorne und fragt wieder nach dem messwert ich bekommen den messwert dieser soll in einer neuen zeile angezeigt werden. der vorherige messwert ist eine zeile oben drüber. ich bestimme wie oft die schleife durchläuft und bestimme dadurch die anzahl meiner messwerte. aber wie kann ich immer den aktuellsten messwert in die neue zeile bringen?
Redest du da von Datenstrukturen wie einer Liste oder von der print-ausgabe, etc.? Willst du die Daten konservieren oder nur anzeigen?
@Y0Gi:
Muss dann wohl in 2.6 neu sein.
Code: Alles auswählen
In [284]: collections.deque([], 10)
---------------------------------------------------------------------------
<type 'exceptions.TypeError'> Traceback (most recent call last)
/home/bj/<ipython console> in <module>()
<type 'exceptions.TypeError'>: deque expected at most 1 arguments, got 2