2017-08-01 7 views
0

は、私は次の関数があるとします。関数出力を別の変数に格納するためにforループを使用するにはどうすればよいですか?

def function3(start, end): 
    """Read MO information.""" 
    config_found = False 
    var = [] 
    for line in v['molecular orbital primitive coefficients']: 
     if line.strip() == end: 
      config_found = False 
     elif config_found: 
      i = line.rstrip() 
      var.append(i) 
     elif line.strip() == start: 
      config_found = True 
    var1 = [elem.strip() for elem in var] 
    var2 = var1[1:-1] 
    var3 = np.array([line.split() for line in var2]) 
    var3 = np.asarray([list(map(float, item)) for item in var3]) 
    return var3 

そして、私はそうのような変数で、その出力保存したとします

monumber1=function3('1','2') 
    monumber2=function3('2','3') 
    monumber3=function3('3','4') 

など

が、私はこの機能を実行するための方法はあります変数名と関数の引数を毎回手動で設定することなく、設定された回数だけ実行し、出力を設定された数の変数に格納します。たぶんforループを使用していますか?これは私の試みですが、私はそれを機能させるのに苦労しています:

for i in xrange(70): 
    monumber[x] = function3([i],[i+1]) 

ありがとうございました!

+0

** –

答えて

2

問題は、角括弧の使用です。今monumber変数が作成されていることを、私は要素にアクセスすることができます

monumber = [function3(str(i),str(i+1)) for i in xrange(70)] 

monumber = [] # make it an empty list 
for i in xrange(70): 
    monumber.append(function3(str(i),str(i+1))) # you had string integers, so cast 

よりPython的なワンライナーのために、あなたはリストの内包表記を使用することができます。ここでは動作するはずのコードです任意の与えられたインデックスiで、構文monumber[i]を使用します。いくつかの例:

first = monumber[0] # gets the first element of monumber 
last = monumber[-1] # gets the last index of monumber 
for i in xrange(10,20): # starts at i = 10 and ends at i = 19 
    print(monumber[i]) # print the i-th element of monumber 
+0

ありがとう、それは完璧に働いた!別の質問をすることはできますか?各出力を個々の変数に格納するにはどうすればよいですか?たとえば、monumber [1]に具体的にどのようにアクセスできますか? – pennypeat

+0

Pythonは0ベースであるので、 'monumber [0]'は 'monumber'の最初の要素です。与えられた要素にアクセスするには、あなたが言及したのと同じ構文を使用します: 'monumber [i]'はインデックス 'i'の' monumber'の要素にアクセスします。私はいくつかの例で私の答えを更新します –

+0

ああ、私は見る!どうもありがとうございます! – pennypeat

0

あなたはほとんどそれを持っています。あなたも、左側にiを使用する必要があり除き:

monumber[i] = function3([i],[i+1]) 

を今、これが基本的な考え方ですが、コードはmonumberはすでに十分な要素を持つリストであれば、そうでないIndexErrorが発生します動作します。

代わりにリストを作成し、事前にプレースホルダとそれを埋めるのは、我々は動的に新しい値を追加することができます

monumber = [] 
for i in xrange(70): 
    monumber.append(function3([i],[i+1])) 

をもう一つの問題は、あなたが引数あなたの関数の作品の混乱、異なるタイプのように見えることと。関数本体では、startのように見えますが、endは文字列ですが、コードではのリストはの整数はです。機能を変更せずに、あなたが行うことができます:

monumber = [] 
for i in xrange(70): 
    monumber.append(function3(str(i),str(i+1))) 
+0

角括弧はしかし、間違っているようです** 'list'または' dict'のようなコンテナを使用し、動的変数を使用しないでください。 OPの例では、 'function3'のパラメータは文字列(' ''1' '、' '2' 'など)です。私は '' i ''と '' i 'の代わりに '' str(i) ''と '' str(i + 1) [私は1] ') –

+0

はい、私はちょうど私の編集を終えていた:) –

+0

ありがとうございました! – pennypeat

関連する問題