我正在检查一些不同类别的平均值
cat_1 = []
for i, j, k in zip(is, js, ks):
if i == 1:
cat_1.append(i)
avg_cat_1 = stats.mean(cat_1)
print("Avg for cat_1:", avg_cat_1)
如果要包括多个类别,我希望避免为每个新类别写一行新行。
对于列表的初始化,我可以这样做:
for i in range(nr of categories):
a = "cat_%s" % (i)
print (a)
但是那当然只会打印我一行,并且不会执行一行,而if语句则更复杂。
我想知道是否有一种方法可以执行这样的循环:
for i in range(nr of categories):
cat_i = []
或
for i in range(nr of categories):
cat_%s = [] %(i)
其中“ i”不是被识别为变量字符串的一部分,而是被识别为临时循环变量,并且仅产生可执行代码行,而不仅仅是打印输出
答案 0 :(得分:0)
有一种方法可以按名称查找变量。说全局变量:
globals()[f'cat_{i}'] = 9
但这令人费解。鉴于信息有限,您的用例是列表列表的教科书用例:
for i in range(num_of_categories):
cat[i].append(some_operation(i))
答案 1 :(得分:0)
您可以使用字典,例如:
cat_dict = {'cat_1': cat_1, 'cat_2': cat_2, 'cat_3': cat_3, ... }
for i in range(1, number_of_categories + 1):
cat_dict['cat_%s' % i] = []
还有不推荐的方法:您可以使用exec
for i in range(1, number_of_categories + 1):
exec('cat_%s = []' % i)
一个很简单的原因,那就是清晰度。如果用户想查看变量cat_3的创建位置,则可以在文件中搜索cat_3,但是此时找不到。
有关不良做法的列表,请参见Why is using 'eval' a bad practice?