Seite 1 von 1

String in Stringliste konvertieren

Verfasst: Mittwoch 31. Mai 2006, 19:00
von darkdream0815
Hallo zusammen,

ich habe den Namen einer Stringliste in einer Stringliste gespeichert und möchte nun auf diese Stringliste zugreifen.

Code: Alles auswählen

liste1 = "liste2" "liste3"
liste2 = "element1" "element2"

Code: Alles auswählen

aktuelleListe = listenelement1vonListe1
(d.h. er soll als aktuelleListe eine Kopie von liste2 machen)
Nun funktioniert letztere Zuweisung leider nicht, da liste2 eben noch ein String ist und nicht als Stringliste durchgeht. Ist eine solche Konvertierung überhaupt möglich bzw. wie kann so etwas realisiert werden. Sorry wegen der nicht konformen Code-Darstellung, aber ich bin noch python-frischling und benutzte python eigentlich auch nicht direkt, sondern hinter meiner benutzten simulationssoftware steht ein python-interpreter und die sim-sw kann obige Problemstellung nicht mit eigenen funktionen beheben...

einen schönen Tag noch,
-> darkdream0815

Verfasst: Mittwoch 31. Mai 2006, 19:51
von CM
Hoi,

ehrlich gesagt, verstehe ich das Problem nicht zur Gänze:
Eine Zuweisung wie

Code: Alles auswählen

l1 = 'a' 'b'
ergibt einen String 'ab' in l1. Das ist wohl nicht ganz was Du willst.
Hingegen kann man auf Elemente in Liste folgendermaßen zugreifen:

Code: Alles auswählen

l2 = ['name1','name2','name3']
print l2[1] # ergibt name2
l3 = [l2,l2,l2] #ist eine Liste mit Listen
l3[0][0] #gibt das erste Element der ersten Liste
Vielleicht willst Du aber auch ein Dictionary?

Code: Alles auswählen

d1 = {'name1':l1,'name2':l2}
d1['name1'] #gibt 'ab'
Am besten Du schaust mal ins Tutorial.

Gruß,
Christian

Verfasst: Mittwoch 31. Mai 2006, 20:42
von darkdream0815
Hallo CM,

vielen Dank für die schnelle Antwort... Ja mit dem verständlichen Erklären ist das immer so eine Sache. Ich probiere es noch mal :-). Ich habe in einer stringliste "liste1" referenzen auf andere stringlisten gespeichert, z.B. soll das erste Element eben eine Referenz auf die "liste2" sein. Wie ich auf elemente einer liste zugreife ist mir klar, d.h. den string "liste2" bekomme ich ganz einfach, allerdings ist es vom Typ her ein string und eben keine Liste. Was ich machen möchte ist nun auf die "liste2" auch zugreifen. Ich muss mit vielen untereinander verketteten Listen arbeiten, daher möchte ich die Referenzen auf eine Parent- / Childliste in dieser Form speichern. In Klartext möchte ich eigentlich folgendes machen:

Kopiere den Inhalt der Liste, deren Name in der "liste1" an erster Stelle zu finden ist, in die "aktuelleListe". Also die "aktuelleListe" bestünde danach aus "element1" "element2".

dictionaries helfen hier meiner Meinung nach auch nicht weiter... Hoffe mein Problem nun verständlich ausgedrückt zu haben...

-> darkdream0815...

Verfasst: Mittwoch 31. Mai 2006, 21:39
von BlackJack
Entweder Du speicherst nicht die Namen in der Liste sondern Referenzen auf die entsprechenden Listen:

Code: Alles auswählen

werte1 = [1, 2, 3]
werte2 = [4, 5, 6]
listen = [werte1, werte2]
Oder dictionaries sind doch das was Du suchst. Du möchtest doch eine Abbildung von einem Namen auf eine Liste haben:

Code: Alles auswählen

listen = { 'werte1': [1, 2, 3],
           'werte2': [4, 5, 6] }

Verfasst: Mittwoch 31. Mai 2006, 22:22
von darkdream0815
Hallo BlackJack,

danke für die antwort, komm unten nochmal darauf zurück. ok, hol ich noch etwas weiter aus: ich soll ein textbasiertes menü mit mehreren ebenen simulieren. jede menüebene wird änderungsfreundlich in einer liste gespeichert.

Code: Alles auswählen

sl01 = "leer" "sl01links" "menüname" "untermenü1" "untermenü2"
sl01links = "leer" "parentliste" "leer" "sl0101" "sl0102"
sl0101 = "untermenü1" "element1" "element2"
wenn ich also "untermenü1" im ui selektiere, soll in der zugehörigen referenzliste (steht an 2. Stelle in der liste, hier sl01links) nachgeschaut werden, welche liste nun gezeigt werden soll (hier sl0101,dieselbe elementnummer wie "untermenü1"). es geht jetzt nicht darum, ob die linkliste nun notwendig ist oder nicht und ob gewisse redundanzen bestehen: das problem "aus string mach liste" bleibt bestehen... obige lösung ist wie gesagt änderungsfreundlich und flexibel, später möchte ich einfach Listen hinzufügen, durch andere ersetzen, namen ändern usw... allerdings bin ich für vorschläge offen, wie das ganze auch anders realisiert werden kann.
Entweder Du speicherst nicht die Namen in der Liste sondern Referenzen auf die entsprechenden Listen
die Namen sind ja die referenzen auf die listen. so ganz erschliesst sich mir der sinn nicht. Ist obiges szenario mit so einer struktur bzw. mit dictionaries besser realisierbar?

zum thema typumwandlung: eval('liste2') habe ich auch schon ausprobiert, funktionierte nicht, aber vielleicht gibts dabei ja noch einen fehler, dann gibts auch noch das kommando list, was ich noch ausprobieren könnte...

-> darkdream0815

Verfasst: Donnerstag 1. Juni 2006, 13:14
von CM
Hoi darkdream0815

nochmal:

Code: Alles auswählen

sl01 = "leer" "sl01links" "menüname" "untermenü1" "untermenü2"
# ergibt
'leersl01linksmen\xc3\xbcnameuntermen\xc3\xbc1untermen\xc3\xbc2'
das ist schon etwas verwirrend, wenn Du dann immerfort von Listen sprichst. Vielleicht wäre ein Blick ins Tutorial doch mal angeraten ;-) ?

Mein Vorschlag für Dein "Problem" sind in der Tat dicts:

Code: Alles auswählen

submenu = {'s1':['option5']}
menues = {'menu1':['option1','option2','option3'],'menu2':['option4',submenu]}
#ergibt
{'menu2': ['option4', {'s1': ['option5']}], 'menu1': ['option1', 'option2', 'option3']}
#Achtung: Einträge sind nicht sortiert!
Hilft das weiter?

Gruß,
Christian

Verfasst: Donnerstag 1. Juni 2006, 15:27
von darkdream0815
Hallo CM,

das Verständigungsproblem liegt beim Umweg über das Simulationstool. Dort kann ich eben eine Stringliste so eingeben und das ist auch wirklich eine Stringliste (sicher habe ich den Code für Dich verwirrenderweise nicht pythonkonform dargestellt :-)). Wie ich mittlerweile herausgefunden habe, unterstützt das Tool leider keine verketteten Listen und auch keine Dictionaries, es kommt wohl einiges nicht zum Python-Interpreter durch. Ich seh nach dem heutigen Herumprobieren auch keine Möglichkeit, meinen Ansatz zu realisieren und bin grade dabei, eine für mich unbefriedigende aufwändige Lösung umsetzen, weils anders nicht geht. Danke für Eure Hilfe, ich erklär dann mal den Thread für geschlossen ;-)

-> darkdream0815