2009-07-02 18 views
0

を使用したデータの簡素化:私はコードを単純化しようとしていたforループ(パイソン)

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

:私はのように、forループを使用することを望んでいた

  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

私はちょうどこれについての簡単な質問があった、私は前に%(私)、見たことがない。それは正確に何をしますか?ありがとう! – 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

あなたは本当にこのように、リストや辞書のようにデータを構造化する必要があります:Python的、これは非常に簡単に、そしてより多くなるだろう

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に同意します。そこには多くの斬新な答えがありますが、理解しやすいコードが得られるのは1つだけです。 –

関連する問題