2014-09-25 63 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