为序列变量赋值

Assign values to serial variables

提问人:Renyun Zhang 提问时间:11/6/2023 最后编辑:S.BRenyun Zhang 更新时间:11/6/2023 访问量:69

问:

我想为序列变量赋值。像这样:

data_1 = a
data_2 = 2*a
...
data_n = n*a

如何使用循环来做到这一点?

python-3.x 循环

评论

0赞 Daviid 11/6/2023
使用函数eval()
2赞 Sayse 11/6/2023
很少有需要的,通常存储在一个集合中,xy问题是什么?variable_x
0赞 Sayse 11/6/2023
即 - 在创建所有这些变量后,您希望如何使用它们?
0赞 Andrej Kesely 11/6/2023
我建议使用list
0赞 S.B 11/9/2023
你检查过答案了吗?

答:

-2赞 Chris P 11/6/2023 #1
for i in range(1,n+1):
     eval("data_"+str(i)+" = "+str(a*i))
     exec("print(data_"+str(i))")

评论

0赞 Renyun Zhang 11/6/2023
谢谢。但是,使用代码弹出错误“SyntaxError: invalid syntax”。
0赞 S.B 11/6/2023 #2

我不记得任何用例污染全局命名空间是有益的。在这些情况下,最好使用字典或列表(当您有连续整数索引时):

a = 10
d = {f'data_{i}': a * i for i in range(1, 10)}
print(d['data_2'])  # 20

但是现在,我认为您甚至不需要存储它们。您可以使用简单的功能轻松即时生成它们。

我将使用一个类来展示一种更详细的方法,该类为您提供了获取对象的 dict 语法:

class Data:
    def __init__(self, a) -> None:
        self.a = a
    def __getitem__(self, item: str):
        _, n = item.split("_")
        return self.a * int(n)
    
d = Data(10)
print(d["data_2"])  # 20

评论

0赞 AKX 11/6/2023
这里也没有必要使用字典——列表会更好,因为我们谈论的是顺序
0赞 S.B 11/6/2023
@AKX 是的,对。这只是一个示范。事实上,我们不需要任何种类的容器。这是一个简单的计算。