For-Schleife Variablennamen

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
_nohtyp_
User
Beiträge: 127
Registriert: Mittwoch 8. Januar 2014, 15:38

Ich suche eine Möglichkeit, beim Schleifendurchlauf neue Variablen zu erschaffen.
z.B. stelle ich mir das so vor:

Code: Alles auswählen

anzahl = 2
for i in range(1, anzahl+1):
	variable+i = 12
	neuevariable+i = 21
Am Ende soll die Variable "variable1" mit dem Wert 12, die "variable2" mit dem Wert 12, die "neuevariable1" mit dem Wert 21 und die "neuevariable2" mit Wert 21 herauskommen.

Geht sowas? Oder geht es besser?
BlackJack

@_nohtyp_: Du möchtest wahrscheinlich eigentlich bei 0 anfangen und eine Liste verwenden.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ganz schlechte Idee. Wenn du anfängst Namen zu Nummerieren, dann willst du eine vernünftige Datenstruktur verwenden. In der Regel Tupel, Listen oder Dictionaries.
Das Leben ist wie ein Tennisball.
_nohtyp_
User
Beiträge: 127
Registriert: Mittwoch 8. Januar 2014, 15:38

Mal mein Beispiel:

Code: Alles auswählen

	for i in range(1, anzahl_tage+1):
		# Baumverzeichnis des XML durchgehen
		erster_tag = vp.getchildren()[3]
		erster_kopf = erster_tag.getchildren()[0] 
In meinem XML suche ich zuerst nach der Anzahl der Tage, für die Informationen vorliegen. Nun soll es für jeden Tag Variablen erstellen, und nicht nur für einen.
BlackJack

@_nohtyp_: Und noch mal: Lass das mit den Nummern sein und erstelle eine Liste mit den Werten.
_nohtyp_
User
Beiträge: 127
Registriert: Mittwoch 8. Januar 2014, 15:38

Und wie setze ich das um?
Append()?
BlackJack

@_nohtyp_: Zum Beispiel.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Aber mit kleinem a.
In specifications, Murphy's Law supersedes Ohm's.
_nohtyp_
User
Beiträge: 127
Registriert: Mittwoch 8. Januar 2014, 15:38

Ich brauche mal einen Beispiel-Code. Ich bekomme es sonst nicht hin.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das Leben ist wie ein Tennisball.
BlackJack

Code: Alles auswählen

In [6]: xs = list()

In [7]: xs
Out[7]: []

In [8]: xs.append(42)

In [9]: xs
Out[9]: [42]
_nohtyp_
User
Beiträge: 127
Registriert: Mittwoch 8. Januar 2014, 15:38

lol. Ich meine wie ich die das mit der Liste und der for Schleife mache. Hier mal ein wenig Code, wie ich es mir vorstelle:
variable kann unterschiedliche Werte haben

Code: Alles auswählen

liste = []
for i in rage(variable)
    liste.append(irgendwas.getchildren()[0])
    liste.append(nochwas.getchildren()[2])
    ...
return liste
 
Bei jedem Durchlauf muss eine neue Liste entstehen. Außerdem müssen auch nach jedem Durchlauf neue Positionen eingetragen werden (z.B. getchildren()[6]), da sich im XML dann mehrere dieser tags befinden.
BlackJack

@_nohtyp_: Ich habe den Verdacht das Du Dich da zu sehr auf Positionen von Elementen verlässt. Das X in XML steht für „extensible”, also erweiterbar. Du solltest Dich also an den Tags der Elemente orientieren und Dich nicht darauf verlassen das alle Dokumente so aussehen werden wie das Beispiel was Du hast. Wenn Du mehrere Werte für jeden Tag extrahieren willst, dann solltest Du die Werte pro Tag vielleicht auch nicht in Listen stecken, sondern zum Beispiel `collections.namedtuple()` und *die* dann in einer Liste sammeln. Eventuell auch eine noch verschachteltere Datenstruktur, je nach dem wie die Daten und die Struktur der XML-Datei aussehen und was damit gemacht werden soll.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

In meinem XML suche ich zuerst nach der Anzahl der Tage, für die Informationen vorliegen. Nun soll es für jeden Tag Variablen erstellen, und nicht nur für einen.
Wie wäre es mit dictionary. http://docs.python.org/2/library/stdtyp ... ew-objects

Code: Alles auswählen

values = {}

for day in days:
    values[day] = [infoone, infotwo]

print(values)
_nohtyp_
User
Beiträge: 127
Registriert: Mittwoch 8. Januar 2014, 15:38

Wie meinst du dass?
So?

Code: Alles auswählen

tag1 = collections.namedtuple(stunde, fach, ...)
Ich sehe da keinen Unterschied.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@_nohtyp_: anscheinend besteht ja Dein XML nicht nur aus einer Liste mit einfachen Werten, sondern die Werte haben auch noch eine Unterstruktur. Diese Unterstruktur mußt Du natürlich in Python auch nachbilden, zum Beispiel indem Du Wörterbücher oder Named-Tuples nimmst. Statt »getchildren« nimmt man üblicherweise »find« bzw. »findtext« um den Inhalt bestimmter Tags zu bekommen.
_nohtyp_
User
Beiträge: 127
Registriert: Mittwoch 8. Januar 2014, 15:38

Das mit dem Dictionary klingt gut. Wie schaffe ich es, dass so eine Liste herauskommt:

{"Montag":[Info1, Info2...], "Dienstag":[neueInfo1, neueInfo2, ...]}
_nohtyp_
User
Beiträge: 127
Registriert: Mittwoch 8. Januar 2014, 15:38

Habe es geschafft. Danke.
Antworten