【问题标题】:I want to create a dynamic variable and use it [closed]我想创建一个动态变量并使用它[关闭]
【发布时间】:2021-09-02 12:11:48
【问题描述】:

我第一次尝试在 Python 中创建和使用动态变量。

for i in range(0,len(test_data)):
     globals()["test_list_{}".format(test_data[i])]=[]
     globals()["test_calculation_{}".format(test_data[i])]=0

首先,我创建了 test_list_number 和 test_calculation_number 作为全局变量。

然后我想将它用于并用于计算。 我在这里编写的代码是通过简化我将要使用的代码而制作的。

如何更改以下两个 for 语句中的数字?

1

--------------下面是一个代码示例。 -------------

import pandas as pd
import numpy as np

X=list(np.random.random(100)*100)
Y=list(np.random.random(100)*100)

test_data= [2,5,7,8]

test_dict={(i,j):np.hypot(X[i]-X[j],Y[i]-Y[j]) for i in range(0,100) for j in range(0,100)}



test_df_data2={
    'index' : [1,2,3],
    'data1' : [3,5,6],
    'data2' : [2,5,6]
}



test_df_data5={
    'index' : [1,2,3],
    'data1' : [8,3,1],
    'data2' : [3,2,7]
}

test_df_2  =pd.DataFrame(test_df_data2)
test_df_5  =pd.DataFrame(test_df_data5)


for i in range(0,len(test_data)):
    globals()["test_list_{}".format(test_data[i])]=[]
    globals()["test_calculation_{}".format(test_data[i])]=0

    
    
for i in range(0, len(test_df_2     )  ):
    test_list_2       .append((test_df_2   .data1[i],test_df_2     .data2      [i]))

for i in range(len(test_list_2    )):
    test_calculation_2    = test_calculation_2     + test_dict[test_list_2       [i] ]

    
print( test_calculation_2)



【问题讨论】:

  • 使用带有“动态变量”名称的字典作为键。
  • 这能回答你的问题吗? How do I create variable variables?
  • 在 Python、numpy 或 pandas 文档中找到了有关“动态变量”的任何内容。我不记得有这个名字的任何东西,但我可以猜到你想要做什么。您最好使用记录在案的、公认的做法,而不是从另一种语言中导入某些概念。

标签: python pandas numpy


【解决方案1】:

简短回答,不要这样做!

人们普遍认为这是一种不好的做法(请参阅for example)。做一些难以调试的事情、覆盖现有变量或使用错误的命名空间的风险很高。另外还有eventual pitfalls and lack of robust methods to do this

改用容器。 您将拥有更短、更简洁、更易于调试的代码。

字典非常适​​合:

# initialize
my_dfs = {}

# computation
for i in …:
    my_dfs[f'df_computation_{i}'] = …

# access
my_dfs['df_computation_42']

【讨论】:

  • 我用错了方法,因为我没有好好学习。谢谢你告诉我。在问另一个问题之前我会先问。
  • @Soo 不要感觉不好,很多人都想这样做。这感觉像是处理多个数据集的一种有吸引力/自然的方式。我认为主要是凭借经验,您获得了足够的抽象来意识到这不是理想的/不需要的。
猜你喜欢
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2016-01-24
相关资源
最近更新 更多