Seite 1 von 1

Verkettete Liste für Listen ['ip', 'gateway, hostname',....]

Verfasst: Mittwoch 20. Januar 2010, 16:57
von piwi
Hallo,
gibt es in python oder wxpython eine möglichkeit eine dynamische verketteteliste anzulegen, welche mehrere listen mit folgenden stringdaten ['ip', 'gateway, hostname',....] speichert?
ich sende eine broadcastnachricht übers netzwerk und jenachdem wieviele gerade im netzwerk sind (2 oder 5, oder 50), bekomme ich von jedem einzelnen gerät konfigdaten zugeschickt.
eine verketteteliste, die die einzelnen hostdaten in einem objekt speichert wäre sehr nett..


vielen dank...

Verfasst: Mittwoch 20. Januar 2010, 17:02
von BlackJack
@piwi: Warum muss das jetzt unbedingt eine verkettete Liste sein? Tut nicht auch eine ganz normale?

Verfasst: Mittwoch 20. Januar 2010, 20:41
von piwi
muss nicht unbedingt eine verketteteliste sein.mir geht es nur darum, dass wenn z.b. 10 hosts eine antwort schicken, muss ich die daten lokal speichern.d.h. jeder host schickt als antwort auf die broadcast message sein konfigurationdaten:
host1: ['ip', 'gateway, hostname',....]
host2: ['ip', 'gateway, hostname',....]
....
....
....
host10:['ip', 'gateway, hostname',....]

die einzelen listen (['ip', 'gateway, hostname',....] ) muss ich lokal im speicher ablegen und in einer wxTreeCtrl darstellen.
wenn nun der nutzer zwischen den Tree Elementen umschaltet, soll die konfiguration des jeweiligen hosts angezeigt werden. dazu wolle ich eine verkettete liste anlegen, um die jeweilige konfigliste (['ip', 'gateway, hostname',....] ) des host zu laden.
in c könnte ich z.b. ein 2d array erstellen: char daten[][]
oder ich erstelle einfach eine datei wo ich die elemente zwischenspeichere

Verfasst: Mittwoch 20. Januar 2010, 20:55
von EyDu
Hallo!

Dann willst du wohl eher ein Dictionary. Falls du es noch nicht getan haben solltest, dann schaue dir dazu mal die Abschnitte im Tutorial an. In Python kannst du Listen beliebig lang erweitern, du musst dich also nicht darum kümmern wie die Implementierung aussieht.

Für das Problem würde ich allerdings auf Listen verzichten und die folgende Struktur wählen:

Code: Alles auswählen

spam = {
    host0: ("ip", "gateway", ...),
    host1: ("ip", "gateway", ...),
    ...
}
Die Tupel könntest du auch durch Dictionaries ersetzen, dann können beliebige Zusatzinformationen gespeichert werden.

Sebastian

Verfasst: Mittwoch 20. Januar 2010, 21:25
von ms4py
Als OO-Anhänger werfe ich hier mal das Stichwort "Klasse" in den Raum ;)

Verfasst: Mittwoch 20. Januar 2010, 21:51
von problembär
piwi hat geschrieben:gibt es in python oder wxpython eine möglichkeit eine dynamische verketteteliste anzulegen, welche mehrere listen mit folgenden stringdaten ['ip', 'gateway, hostname',....] speichert?
Ohne jetzt in die Quellen des Python-Interpreters geguckt zu haben, bin ich trotzdem überzeugt, daß die Listen in Python dynamische verkettete Listen sind.
Du brauchst sie also nicht mehr selbst zu implementieren, sondern sie nur noch zu benutzen.
Auch Listen von Listen sind ohne weiteres möglich:

Code: Alles auswählen

a = [["a", "b"], ["c", "d"], ["e", "f"]]
Null Problem. Alles schon fertig!

Das ist ja gerade das Tolle an Python!

Gruß

Verfasst: Mittwoch 20. Januar 2010, 22:09
von EyDu
problembär hat geschrieben:Ohne jetzt in die Quellen des Python-Interpreters geguckt zu haben, bin ich trotzdem überzeugt, daß die Listen in Python dynamische verkettete Listen sind.
Da wirf doch noch mal einen Blick in den Code ;-) Implementiert sind die Listen als Arrays, sonst hätte man für einen Indexzugriff und das Anhängen eine unpraktische Komplexität von O(n).

Das ändert natürlich nichts daran, dass man in Python keine verketteten Listen braucht, da die eingebauten (meistens) vollkommen ausreichen.

Verfasst: Mittwoch 20. Januar 2010, 23:00
von Darii
EyDu hat geschrieben:Das ändert natürlich nichts daran, dass man in Python keine verketteten Listen braucht, da die eingebauten (meistens) vollkommen ausreichen.
Klar braucht man die, ebenso wie collections.deque seine Daseinsberechtigung hat. Bloß dass meist halt eine normale Liste reicht. Die richtige Datenstruktur für das Problem zu benutzen kann u.U. mehr bringen als einfach nur von Python auf C umzusteigen.

Verfasst: Donnerstag 21. Januar 2010, 08:39
von piwi
@EyDu

ganau das ist es was ich gesucht habe.
eine Liste in einer Liste zu speichern.
hier das ergebnis:
[
['PC ', '00:04:A3:00:00:01', ''],
['192.168.0.250', '255.255.255.0', '192.168.0.1', 'PC ', '00:04:A3:21:25:0E', '1', '192.168.0.100', '10000', '10005', '1000', '1001', '2000', '2001', '3000', '3001', '4000', '4001', '1.1.8', '']
]

oft muss ich bei python noch ein bisl umdenken, da ich aus der c,c++ ecke komme und sonst eigentlich zu 90% Firmware für eingebettete Systeme entwickle...

vielen dank für eure hilfe..

schönen gruß
piwi
www.pi-embedded.de

Verfasst: Donnerstag 21. Januar 2010, 09:00
von mkesper
piwi: Kommt es dir auf die Reihenfolge an?
Musst du häufig nach einzelnen Elementen suchen?
Wenn es auf die Reihenfolge nicht ankommt, du dafür aber nach deinem "Host" suchen musst, dann solltest du ein Dictionary verwenden. Listen müssen sequentiell durchsucht werden, bei Dictionaries wird anhand eines Hashwertes gesucht, d.h. es geht bei vielen Einträgen wesentlich schneller.

Verfasst: Donnerstag 21. Januar 2010, 10:18
von piwi
@mkesper

ne, auf die reihenfolge kommt es mir nicht an.
eventuell müsste ich nach nach elementen suchen, wenn ich konfigdaten ändere und dann an den host wieder zurückschicke.
dann erstelle ich doch lieber mal ein dictionary...

Verfasst: Donnerstag 21. Januar 2010, 19:25
von piwi
klappt super mit den dictionaries...
danke noch mal!!!