2009-07-02 3 views
0

Я пытался упростить код:Упрощая данных с цикл (Python)

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

где:

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

Я хотел использовать цикл, как:

headerList = [] 
    for i in range(6) 
      headerList.append(header+i) 

Однако python не узнает, что заголовок + i представляет строку header1. Есть ли способ упростить этот код или заставить цикл for работать? Спасибо огромное!

+0

У кого-либо есть проблема с тем, как этот вопрос отмечен. Нужны ли нам «для», «цикл» и «упростить»? – Triptych

ответ

2

Поместите заголовки в массив и проведите через него.

2

Вы можете использовать locals получить локальную область видимости как Dict:

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

Если это возможно, хотя, вы должны просто использовать переменную input непосредственно, как некоторые другие ответы предложил.

+0

У меня просто был быстрый вопрос об этом, я никогда раньше не видел% (i,). Что именно он делает? Благодаря! – user130633

+0

Это оператор форматирования строк. Ознакомьтесь с документами здесь: http://www.python.org/doc/lib/typesseq-strings.html –

+0

отлично, большое вам спасибо! – user130633

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

Вы должны действительно структурировать ваши данные в виде списка или словаря, как это:

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

который сделает это намного проще, и больше вещий. Но вы можете делать то, что хотите, используя getattr:

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

... и если использовать список, первым будет input.headerOut [0]. –

+0

+1 за правильную вещь –

+1

согласен с @JohnPirie, +1, поскольку там много новых ответов, но только один, который дает код, который легко понять. –