2009-07-02 57 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) 

我本來想用一個for循環,如:

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

但是,python將無法識別該頭+我代表字符串header1。有什麼辦法來簡化這段代碼或讓for循環工作嗎?非常感謝!

+0

任何人都有這個問題如何標記問題。我們需要'爲','循環'和'簡化'嗎? – Triptych 2009-07-02 18:37:09

回答

2

將標題放在數組中並循環。

2

您可以使用locals來獲取局部範圍的字典:

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

如果可能的話,雖然,你應該直接使用input變量,因爲一些其他的答案的建議。

+0

我剛纔對此有個疑問,我從來沒有見過%(i,)。它究竟做了什麼?謝謝! – user130633 2009-07-02 17:29:35

+0

這是字符串格式化操作符。看看這裏的文檔:http://www.python.org/doc/lib/typesseq-strings.html – 2009-07-02 17:31:22

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

你真的應該組織你的數據列表或字典,像這樣:

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

這將使該輕鬆了很多,而且更Python。但你可以做你想用的東西getattr

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