通过在for循环中迭代名称打印不同变量的内容
问题描述:
有人可以向我解释如何在循环中打印下列变量的内容吗?通过在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))')
答
您可以使用全局()来获取全局变量的字典并将其转换为字符串之前,使用逻辑与除了转换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,尝试范围,并尽量不要逃避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)
答
问题是在阵列length
。 numpy.linspace()
实际上产生如下的float
的数组。
[23.0, 24.0, ..., 42.0]
试试这些代码,你应该得到你想要的。
for i in range(23, 43):
print("Week" + str(i))
print(eval("Week" + str(i)))
最后,使用变量作为名称的一部分真的不是一个好主意。如果可以,请尝试dict
。
为什么你有这样的单独命名列表?你应该让他们成为一个列表或字典的成员。 [将数据保留在变量名称之外](https://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html) –
您是否考虑将您的变量放入数组中?类似于 ar = [Week23,Week24,Week25,...]然后单独打印: for vr in ar: print(vr) –
我回答了如何实现这一点,但您应该考虑更好的存储方式,例如'list'或者'dict',如果你不需要它们以'0'开始并且是递增的。 – Adirio