2009-07-02 7 views
0

Ich habe versucht, den Code zu vereinfachen:Vereinfachen Daten mit einer for-Schleife (Python)

  header = [] 
      header.append(header1) 
      header.append(header2)     
      header.append(header3) 
      header.append(header4) 
      header.append(header5) 
      header.append(header6) 

wo:

  header1 = str(input.headerOut1) 
      header2 = str(input.headerOut2) 
      header3 = str(input.headerOut3) 
      header4 = str(input.headerOut4) 
      header5 = str(input.headerOut5) 
      header6 = str(input.headerOut6) 

Ich wollte eine for-Schleife verwenden, wie:

jedoch erkennt Python nicht, dass Header + i die Zeichenfolge header1 darstellt. Gibt es eine Möglichkeit, diesen Code zu vereinfachen oder die for-Schleife zu funktionieren? Ich danke dir sehr!

+0

Jeder habe ein Problem mit, wie diese Frage markiert. Brauchen wir "for", "loop" und "simplify"? – Triptych

Antwort

2

Setzen Sie die Header in ein Array und durchlaufen Sie sie.

2

können Sie locals verwenden den lokalen Bereich als dict zu erhalten:

headerList = [] 
for i in xrange(1, 7): 
    headerList.append(locals()['header%s' % (i,)]) 

möglich Wenn allerdings sollten Sie nur die input Variable direkt verwenden, da einige der anderen Antworten vorgeschlagen.

+0

Ich hatte gerade eine kurze Frage dazu, ich habe das% (i,) vorher noch nie gesehen. Was genau macht es? Vielen Dank! – user130633

+0

Es ist der String Formatierungsoperator. Schauen Sie sich die Dokumentation hier an: http://www.python.org/doc/lib/typesseq-strings.html –

+0

toll, vielen Dank! – user130633

5
header = [str(getattr(input, "headerOut%d" % x)) for x in range(1,7)] 
9

Sie sollten wirklich Ihre Daten als Liste oder ein Dictionary-Struktur, wie folgt aus:

input.headerOut[1] 
input.headerOut[2] 
# etc. 

, die diese viel einfacher machen würde, und mehr Pythonic. Aber Sie können tun, was Sie wollen mit getattr:

headerList = [] 
for i in range(1, 7): 
    header = str(getattr(input, 'headerOut%d' % i)) 
    headerList.append(header) 
+1

... und wenn Sie eine Liste verwenden, wäre die erste Eingabe.headerOut [0]. –

+0

+1 für die richtige Sache zu tun –

+1

stimme @JohnPirie, +1, da gibt es viele neue Antworten, aber nur eine, die Code ergibt, der leicht zu verstehen ist. –