2014-09-25 67 views
0

我要收集一組變量列表的列表,比如我這樣做迭代:使轉換後的字符串變量

x=10 
func=[] 
for i in range(10): 
    globals()['p%s' % i]=i**2+x*10 

在我想有動態變量列表末尾

func=[p0,p1,p2,p3,p4,p5,p6,p7,p8,p9] 

該怎麼辦?

回答

0

我認爲你應該認真考慮重寫你的代碼給我們p [0],p [1],p [2]而不是p0,p1,p2;然而,這應該得到你相同的結果:

x=10 
func=[] 
for i in range(10): 
    globals()['p%s' % i]=i**2+x*10 
    func.append(i**2+x*10) 
+0

其實這只是一個例子。我想在最後製作一組圖表和圖例,我需要收集變量名稱來執行此操作。'p1,= plot([1,2,3]) p2 = plot([3,2,1 ]) p3,= plot([2,3,1]) legend([p2,p1,p3],[「line 2」,「line 1」,「line 2」]) – Dalek 2014-09-25 01:21:39

+1

@Dalek no you不要,你需要添加一個抽象層。您需要有1個(3個元素)列表,而不是有3個變量。每當你把一個數字放在一個變量名裏,想想你是否可以把它寫成一個列表。它會更好。 – 2014-09-25 01:24:12

0

我想你想要func列表來存儲變量不是值。

試試這個:

x=10 
func=[] 
for i in range(10): 
    globals()['p%s' % i]=i**2+x*10 

for i in globals().keys(): 
    if i.startswith('p') and len(i)==2: 
     func.append(i) 

print func 
1

編號的變量名是你應該使用一個列表,元組或字典,而不是一個標誌。例如,在這裏你可以使用一個list comprehension

x = 10 
func = [i**2+x*10 for i in range(10)] 

或者,您在評論中提到的例子(假設你使用matplotlib):

import matplotlib.pyplot as plt 
data = [[1,2,3], [3,2,1], [2,3,1]] 
for i, datum in enumerate(data, 1): 
    plt.plot(datum, label='line {}'.format(i)) 
plt.legend()  
plt.show() 
+0

我認爲應該有一種方法來製作變量名稱列表?!! – Dalek 2014-09-25 01:31:12

+0

你可以,但你不應該想。使用動態命名變量進行編程總是很痛苦,因爲它會強制你使用笨拙的字符串格式來訪問變量。此外,它比索引到列表,元組或字典更慢。有更好的方法來做你想做的事情。 – unutbu 2014-09-25 01:33:53

+0

我得到這個錯誤'TypeError:'PathCollection'對象不可迭代 ' – Dalek 2014-09-25 02:03:11