Seite 1 von 1

name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 15:47
von Tecumseh
Hey,
sorry falls der Titel komisch klingt, konnte das Problem so kurz nicht besser beschreiben. Hier nun ausführlich:

ich habe eine Liste a=[] und möchte zu dem Namen der Liste gern etwas hinzufügen, damit ich dann bekomme:

a_A=[]
a_B=[]

Gibt es dafür einen Befehl, also so was wie: a_+'a' oder so? (Das funktioniert natürlich nicht)
Ich brauch diesen Befehl, damit ich Listen in einer Funktion immer wieder automatisch neu erstellen und mit einem string-Zusatz versehen kann, z.B. einem Ordnernamen.

Ich rum gesuch in WWW,...konnt aber nix finden, obwohl das Problem ja recht simpel ist.

Danke schon mal!
Philipp

Re: name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 15:53
von Hyperion
Öh... Du hast das Variablen-Konzept in Python nicht verstanden! Wozu willst Du einen *Namen* dynamisch ändern? Diese kannst Du im Code doch gar nicht nutzen, da Du dort ja keine dynamischen Namen hinschreiben kannst. Beschreibe und doch mal, wie Du im Code `a_C` nutzen wolltest? Im Ernst, beschreibe das mal, damit Du das Problem bis zu Ende durchdenkst; denn dabei wirst Du eben auf das von mir genannte Hindernis stoßen ;-)

Du suchst Dictionaries! Damit kannst Du als Schlüssel den Verzeichnisnamen nehmen und als Wert die Liste. Ich denke das deckt Dein konkretes Problem hier ab.

Re: name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 16:01
von Tecumseh
danke für die fixe Antwort, ich hatte gehofft ich komme um dics herum;)

ich möchte folgendes machen (etwas heruntergebrochen;)):

ich habe 10 Ordner, die haben alle einen Namen (klar;)) und da ist eine Datei drin. In dieser Datei stehen Zahlen.

Jetzt möchte ich jede Datei bzw. die Zahlen, der 10 Ordner in eine Liste packen.

Der Name der Liste soll jetzt immer als Indizes den Namen des Ordners haben.
ich glaube da gäbe es prinzipiell kein Problem wenn ich halt wüsste wie ich den Ordnernamen in den Listennamen schreibe.

Oder doch?

Edit: ich nutze also quasi die Listen gar nicht dynamisch, hab dann halt blos am ende ganz viele, die ich aber auch alle brauche, da ich dann von den Listen den Mittelwert bilden möchte

Re: name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 16:11
von Hyperion
Du willst also doch etwas dynamisches mit etwas statischem mischen! Du willst Ende die Listen statisch verwenden, also indem Du im Code so etwas (unhandliches) hinschreibst:

Code: Alles auswählen

def avg(l):
    return sum(l) / len(l)

avg(liste_ordner_1)
avg(liste_ordner_2)
avg(liste_ordner_3)
avg(liste_ordner_4)
avg(liste_ordner_5)
...
Die "Generierung" indes willst Du dynamisch umsetzen, indem Du irgend wie in einer Schleife die Namen anhand dieses Musters `liste_ordner_X` erstellen lassen willst.

Mal abgesehen davon, dass das nur über Umwege ginge und nicht empfehlenswert ist: Bemerkst Du Deinen gedanklichen Widerspruch gar nicht? Auf der einen Seite suchst Du einen Weg, kompakten, dynamischen Code zu schreiben - vermutlich, weil Dir das Hinschreiben von 10x dem gleichen Code lästig ist -, auf der anderen Seite willst Du krampfhaft mit einzelnen Namen arbeiten.

Was passiert bei Dir eigentlich, wenn aus 10 20 Ordner werden?

Du musst auch kein Dictionary nutzen; Du kannst auch eine Liste von Tupeln / Listen nutzen... es gibt da viele Möglichkeiten, die eben auch stark vom Anwendungsfall abhängen...

Re: name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 16:13
von cofi
Tecumseh hat geschrieben:danke für die fixe Antwort, ich hatte gehofft ich komme um dics herum;)
Ich benutze fuer Naegel auch immer den Schraubenzieher, da muss ich mich nicht in Haemmer einarbeiten.

Wenn du denn trotzdem Dicts vermeiden willst, kannst du dir ein poor man's dict mit Assoziationslisten machen, also

Code: Alles auswählen

directories = [ ('albert', 23), ('berta', 5), ('charly'), 21, ...]
Was du aber gar nicht willst sind verschiedene Listen, denn das macht den Zugriff beim weiterverarbeiten unnoetig schwer.

Re: name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 16:23
von Tecumseh
noch mal danke,

also warum ich dics vermeiden möcht ist, ich schreib grad meine Diplomarbeit fertig, hab jetzt festgestellt, dass ich einige Daten noch besser nutzen könnte.
Bin aber nicht so der Python-Pro und werde in zwei Tagen da auch nicht soooo viel reißen;)

zu meinem Problem:

es ist nicht so, dass ich die Listen selbst mitteln möchte,....ich mach am ende quasi:
(L_1+L_2 + L_3)/3
für alle Listeneinträge. Deswegen brauche ich alle Listen gleichzeitig und mir ist nicht ganz klar wie das dann bei den Dicts wäre.

Also ist gibt jetzt wirklich nicht einen Befehl, wie ich einfach die Listennamen iterativ mit den Ordnern generieren kann?

Sorry wenn das scheinbar ein mieser Weg ist.

Re: name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 16:31
von Hyperion
Tecumseh hat geschrieben: es ist nicht so, dass ich die Listen selbst mitteln möchte,....ich mach am ende quasi:
(L_1+L_2 + L_3)/3
für alle Listeneinträge.

Und wo taucht da jetzt der "Name" des Verzeichnis auf? Du könntest doch hier prima mit einer Liste von Listen arbeiten...

Du willst also gar nicht den Mittelwert der Werte *einer* Liste ermitteln, sondern den aller Werte der Listen mit *demselben* Index!?

Edit: Wenn ja, dann kannst Du das doch so angehen:

Code: Alles auswählen

data = (
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
)

[s / 3 for s in map(sum, zip(*data))]

>>> [4.0, 5.0, 6.0]
Mittels `zip` akkumulierst Du die zusammengehörigen Werte in eine neue Datenstruktur, die man dann einfach via `sum` jeweils aufsummieren kann.

Re: name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 16:34
von Tecumseh
dann eher so:

(L_Verzeichnis1 +L_Verzeichnis2+ ... + L_Verzeichnisn)/n

ich möchte quasi das erste Element von allen Listen mitteln (und jedes andere dann auch).

Re: name einer liste mit string-Zusatz definieren

Verfasst: Sonntag 17. Juni 2012, 16:43
von Tecumseh
ok, vielen Dank!

Ich denke das müsste klappen:)

herzlichen Dank für die Hilfe, auch wenn ich wohl nicht grad geglänzt habe;)