2017-10-16 47 views
0

有人可以向我解釋如何在循環中打印下列變量的內容嗎?通過在for循環中迭代名稱打印不同變量的內容

Week23 = [12-9, "free", 15.30-12.30, "free", 12-9] 
Week24 = [] 
Week25 = [] 
Week26 = [] 
Week27 = [] 
Week28 = [] 
Week29 = [] 
... 

我試過玩過以下內容,但它沒有打印內容。 exec語句僅打印出「Week23」等。由於解析錯誤,eval語句不起作用。

import numpy as np 
length = np.linspace(23,42,42-23+1) 

for i in length: 
    print("Week" + str(i)) 
    # print(eval("Week" + str(i))) 
    # exec('print("Week" + str(i))') 
+1

爲什麼你有這樣的單獨命名列表?你應該讓他們成爲一個列表或字典的成員。 [將數據保留在變量名稱之外](https://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html) –

+1

您是否考慮將您的變量放入數組中?類似於 ar = [Week23,Week24,Week25,...]然後單獨打印: for vr in ar: print(vr) –

+1

我回答瞭如何實現這一點,但您應該考慮更好的存儲方式,例如'list'或者'dict',如果你不需要它們以'0'開始並且是遞增的。 – Adirio

回答

-2

可以使用locals()功能:

Week23 = [12-9, "free", 15.30-12.30, "free", 12-9] 
Week24 = [] 


for week in [23,24]: 
    print (locals()['Week%s' % week]) 

更Python是一本字典。

+0

我最終把它變成了一個列表,因爲我必須稍後處理數據。 '爲我長: Weeks.append(locals()['Week%s'%int(i)])' – bgaard

-1

您可以使用全局()來獲取全局變量的字典並將其轉換爲字符串之前,使用邏輯與除了轉換i到整數的子集是:

for i in length: 
    print(globals()["Week" + str(int(i))]) 
-3

當我嘗試運行代碼,因爲它是,我得到如下:

Week23.0 
Week24.0 
Week25.0 
Week26.0 
Week27.0 
Week28.0 
Week29.0 
Week30.0 
Week31.0 
Week32.0 
Week33.0 
Week34.0 
Week35.0 
Week36.0 
Week37.0 
Week38.0 
Week39.0 
Week40.0 
Week41.0 
Week42.0 

所以,我只看到了問題的花車,因爲你使用linspace,嘗試範圍,並儘量不要逃避exec'ed字符串中的變量名:

for i in range(23, 42+1): 
    print("Week" + str(i)) 
    print(eval("Week" + str(i))) 
    exec('print(Week' + str(i) + ')') 

如果您堅持使用linspace,請嘗試在使用前將其轉換爲整數。此外,一些可重用性

import numpy as np 
length = np.linspace(23, 42, 42-23+1) 

for i in length: 
    var_name = "Week%i" % i 
    print(var_name) 
    print(eval(var_name)) 
    exec('print(%s)' % var_name) 
-2

問題是在陣列lengthnumpy.linspace()實際上產生如下的float的數組。

[23.0, 24.0, ..., 42.0] 

試試這些代碼,你應該得到你想要的。

for i in range(23, 43): 
    print("Week" + str(i)) 
    print(eval("Week" + str(i))) 

最後,使用變量作爲名稱的一部分真的不是一個好主意。如果可以,請嘗試dict