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

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
piwi
User
Beiträge: 17
Registriert: Montag 18. Januar 2010, 13:37

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...
BlackJack

@piwi: Warum muss das jetzt unbedingt eine verkettete Liste sein? Tut nicht auch eine ganz normale?
piwi
User
Beiträge: 17
Registriert: Montag 18. Januar 2010, 13:37

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Das Leben ist wie ein Tennisball.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Als OO-Anhänger werfe ich hier mal das Stichwort "Klasse" in den Raum ;)
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ß
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
piwi
User
Beiträge: 17
Registriert: Montag 18. Januar 2010, 13:37

@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
Zuletzt geändert von piwi am Donnerstag 21. Januar 2010, 09:21, insgesamt 1-mal geändert.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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.
piwi
User
Beiträge: 17
Registriert: Montag 18. Januar 2010, 13:37

@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...
piwi
User
Beiträge: 17
Registriert: Montag 18. Januar 2010, 13:37

klappt super mit den dictionaries...
danke noch mal!!!
Antworten