Python 在for循环中使用迭代名称打印不同变量的内容

Python 在for循环中使用迭代名称打印不同变量的内容,python,for-loop,printing,Python,For Loop,Printing,有人能给我解释一下,如何在循环中打印以下变量的内容吗 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

有人能给我解释一下,如何在循环中打印以下变量的内容吗

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))')
您可以使用以下功能:

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


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

更具Python风格的是词典

您可以使用global获取全局变量的字典,并使用您的逻辑将其子集,在将i转换为字符串之前,将i转换为整数:

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

当我尝试按原样运行您的代码时,会得到以下结果:

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,请尝试range,并尝试不在执行字符串中转义变量名:

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)

问题在于数组长度。linspace实际上生成一个浮点数组,如下所示

[23.0, 24.0, ..., 42.0]
试试这些代码,你会得到你想要的

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

最后,使用变量作为名称的一部分确实不是一个好主意。如果可以的话,试试dict。

为什么会有这样的单独命名列表?你应该让它们成为列表或目录的成员。你有没有考虑过将变量放入数组?Ar = [周刊23,周刊24,星期25,……]然后单独打印:在AR中的VR:PrimtVRI回答了这是如何实现的,但是如果你不需要从0开始,或者增量,BTW,你应该考虑一个更好的存储,比如一个列表或者一个DICT,eval和exec通常应该避免,因为它们可能会带来安全风险。以下是Ned Batchelder提供的一些更为相关的信息:。您接受的使用局部变量的答案仅在全局命名空间中有效,在全局命名空间中,局部变量返回全局dict,它将在函数内部失败。你可以用globalsdict来做,但你真的不应该这样粗暴地对待本地人或全球人!使用你自己的字典。我最后把它变成了一个列表,因为我以后要处理数据。长度为i的:周。appendlocals['Week%s'%inti]