首页 > 解决方案 > 如何(不)重复具有简单迭代变化的代码行?

问题描述

我正在检查不同类别的一些平均值

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”不是被识别为变量字符串的一部分,而是被识别为临时循环变量,并且只生成可执行的代码行,而不仅仅是打印输出

标签: python

解决方案


有一种按名称查找变量的方法。说全局变量:

globals()[f'cat_{i}'] = 9

但这是令人费解的。鉴于信息有限,您的用例是列表列表的教科书用例:

for i in range(num_of_categories):
    cat[i].append(some_operation(i))

推荐阅读