Skip to main content
 首页 » 编程设计

python之在执行计算时更新 for 循环中的变量名称

2025年05月04日13xing901022

每当我在 Python 中偶然发现某种计算时,我倾向于采用非 Pythonic 方法,因为我对这门语言不太熟悉:

import pandas as pd 
import numpy as np 
 
v        = 8 
gf       = 2.5 
 
data_a1  = np.random.randint(5, 10, 21) 
data_a2  = np.random.randint(5, 10, 21) 
data_a3  = np.random.randint(5, 10, 21) 
data_a4  = np.random.randint(5, 10, 21) 
data_a5  = np.random.randint(5, 10, 21) 
 
data_b1  = np.random.randint(6, 11, 21) 
data_b2  = np.random.randint(6, 11, 21) 
data_b3  = np.random.randint(6, 11, 21) 
data_b4  = np.random.randint(6, 11, 21) 
data_b5  = np.random.randint(6, 11, 21) 
 
e_1 = 2 * (data_a1 + data_b1) / 2 / v / gf 
e_2 = 2 * (data_a2 + data_b2) / 2 / v / gf 
e_3 = 2 * (data_a3 + data_b3) / 2 / v / gf 
e_4 = 2 * (data_a4 + data_b4) / 2 / v / gf 
e_5 = 2 * (data_a5 + data_b5) / 2 / v / gf 

正如您从上面的示例中看到的那样,我明确地写下了五次,而不是使用 Python 我可以想象它的用途——我想通过更新来计算 e它在每次迭代中使用 for 循环,我也更喜欢使用 numpy。

由于我所有的努力都没有结果,所以我转向了 pandas,因为我相当有信心无论出于何种原因我都能救赎自己:

df_a     = pd.DataFrame({'data_a1': data_a1, 'data_a2': data_a2, 'data_a3': data_a3, 'data_a4': data_a4, 'data_a5': data_a5}) 
df_b     = pd.DataFrame({'data_b1': data_b1, 'data_b2': data_b2, 'data_b3': data_b3, 'data_b4': data_b4, 'data_b5': data_b5}) 
 
c   = 0 
dfs = [] 
for i,j in zip(df_a, df_b): 
    e = 2 * (i + j) / 2 / v / gf 
    e = e.add_suffix('_' + str(c)) 
    dfs.addpend(e) 
    c += 1 

唉,我的愚蠢占了上风,我做不到。

  • 是否有一种简化的方法来使用 numpy 处理方程式,以便变量在被认为是 pythonic 的 for 循环中更新自身?
  • 执行这些任务时,建议坚持使用 numpy 还是转向 pandas?

请您参考如下方法:

首先让我们远离创建大量变量名。在 Python 中,列表可以包含其他对象,包括数组。

datalist1 = [] 
for _ in range(5): 
    datalist1.append(np.random.randin(5, 10, 21)) 
# same for datalist2 
datalist2 = [np.random.randint(6, 11, 21),  
             np.random.randint(6, 11, 21), 
            ...] 
 
elist = [2*(a+b)/2/v/gf for a,b in zip(datalist1, datalist2)] 

使用形状为 (5,21) 的二维数组更好。但是我演示的那种列表迭代适用于所有 Python,而不仅仅是 numpy。

您甚至可以根据预先存在的变量创建一个列表:

alist = [data_b1, data_b2, ...]