2009-07-02 2 views
0

내가 코드를 단순화하기 위해 노력했다 :(파이썬)

  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

아무도이 질문에 태그가 지정되는 방법에 문제가 있습니다. 'for', 'loop', 'simplify'가 필요합니까? – Triptych

답변

2

헤더를 배열에 넣고 루프를 반복합니다.

2

당신은 딕셔너리로 ​​로컬 범위를 얻을 수 locals을 사용할 수 있습니다 : 가능하면,하지만 당신은 그냥 직접 input 변수를 사용한다

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

, 다른 답변 중 일부는 제안.

+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에 동의합니다. 많은 새로운 답변이 있지만 이해하기 쉬운 코드를 생성하는 것은 하나뿐입니다. –