2017-08-01 57 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

不要使用動態變量,**使用容器像'list'或'dict' ** –

回答

2

問題是你使用方括號。下面是代碼,應該工作:

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的一行,您可以使用列表理解:

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

既然monumber變量被創建,我可以訪問元素在任何給定索引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])) 

另一個問題是,你似乎是混淆不同類型的參數,你的函數作品用。在函數體中,它看起來像startend是字符串,但是在您的代碼中,您給出了列表,其中每個整數。不改變功能,你可以這樣做:

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

方括號似乎不正確,雖然。在OP的例子中,'function3'的參數是字符串(「1」,「2」等)。我認爲你應該將'i'和'i + 1'轉換爲字符串,而不是製作1個元素的列表(即'str(i)'和'str(i + 1)'而不是'[i]'和' [i + 1]') –

+0

是的,我剛剛完成我的編輯:) –

+0

非常感謝! – pennypeat

相關問題