【问题标题】:Python: populate a list with variable names?Python:用变量名填充列表?
【发布时间】:2022-01-08 23:57:54
【问题描述】:

只是说我有很多变量名称序列为var1var2varn?... 例如:

var1 = 1
var2 = 2
var3 = 3
var4 = 4

我想用这些变量名填充一个列表。我试着这样做,但没有奏效:

def namestr(obj, namespace):
    return [name for name in namespace if namespace[name] is obj]
variables = []
for i in range(1,5):
    variables.append(namestr(vars()['semplus' + str(i)], globals()))

有人知道怎么做吗? 结果应该是这样的:

 [var1, var2, var3, var4]

【问题讨论】:

  • 我会在第一句话之后介入并质疑您为什么要如此命名变量?!为什么不用列表呢?
  • 听起来像字典更适合用在这里。
  • 您应该使用数据结构作为字典而不是变量。但只是为了记录,。 locals() 调用将返回您所期望的 namespace 在您的示例中。
  • @deceze 命名变量有什么问题?
  • 正是您当前遇到的问题:您无法汇总处理它们,而且名称并没有真正增加任何价值。 var[1]var[2] 几乎相同,但整体上也很容易处理。

标签: python arrays numpy


【解决方案1】:

最好用字典来做:

In [1]: d = {}                                                                                        

In [2]: for i in range(1,5): 
   ...:     d[f"var{i}"] = i 
   ...:                                                                                               

In [3]: d["var1"]                                                                                     
Out[3]: 1

In [4]: d.keys()                                                                                      
Out[4]: dict_keys(['var1', 'var2', 'var3', 'var4'])

【讨论】:

    【解决方案2】:

    使用您的 var# 定义,在我一直用于其他测试的工作区中:

    In [330]: def namestr(obj, namespace):
         ...:     return [name for name in namespace if namespace[name] is obj]
         ...: variables = []
         ...: for i in range(1,5):
         ...:     variables.append(namestr(vars()['var' + str(i)], globals()))
         ...: 
         ...: 
    In [331]: variables
    Out[331]: [['i', 'var1'], ['i', 'j', 'var2'], ['dim', 'i', 'var3'], ['i', 'var4']]
    

    这里发生了什么? var2 的值为 2。先前使用的 j 也是如此。而i 是当前的迭代变量。

    In [332]: var1
    Out[332]: 1
    In [333]: var3
    Out[333]: 3
    In [334]: dim             # a prior use of this variable
    Out[334]: 3
    In [335]: i
    Out[335]: 4
    In [336]: j
    Out[336]: 2
    

    因此,您获得的变量名称的值对应于各自的 var1var2 等变量。

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多