2017-10-16 145 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