【问题标题】:Variable name from list as string列表中的变量名作为字符串
【发布时间】:2021-01-31 19:33:47
【问题描述】:

我一直在寻找一种将数组中的变量名作为字符串获取的方法。例如:

a = ['1x', '2y', '3z']
b = ['1xx', '2yy', '3zz']
c = ['1xxx', '2yyy', '3zzz']
arr = [a, b, c]
    
for x in arr:
    print('Currently executing: ', x)
    for e in x:
        print('Return Value: ', e)
    
>>Currently executing: a
>>Return Value: 1x
>>Return Value: 2y
>>Return Value: 3z
>>Currently executing: b
>>Return Value: 1xx
>>Return Value: 2yy
>>Return Value: 3zz
>>Currently executing: c
>>Return Value: 1xxx
>>Return Value: 2yyy
>>Return Value: 3zzz

到目前为止,我的搜索一直没有成功。有关于这个问题的答案与数组之外的变量有关,但我还没有能够将它们转换为我的上下文。 (例如:How to print original variable's name in Python after it was returned from a function?

更新

我已经以几种不同的方式尝试了 vars()[name],但都没有奏效。我认为我不了解我的上下文中的实现。能详细点吗?

print(vars()[arr])
print(vars()[x])
print(vars()[e])

全部返回:

Traceback(最近一次调用最后一次):文件 “C:/Users/wxy/Desktop/thread_test.py”,第 9 行,在 print('返回值:', vars()[arr]) TypeError: unhashable type: 'list'

【问题讨论】:

  • 您需要自己跟踪这个字符串。除非有各种黑客和技巧,否则正确执行此操作的方法是使用适当的数据结构将您想要的数据组合在一起。变量是供程序员阅读和编写源代码的,它们不应被视为程序数据。这里有多种方法,您可以使用dict 将字符串映射到列表或元组列表arr = [('a', a), ('b', b), ('c', c)]。或者创建一个自定义类,具有name 属性和.arr 属性并将其放入列表中。
  • 顺便说一句,这些不是数组,它们是列表
  • “让事情变得比他们需要的更复杂”的很好的例子。只需使用字典。从您想要的任何地方获取键和值并相应地更新字典。

标签: python python-3.x list variables


【解决方案1】:

vars()[name]globals()[name] 取决于变量的范围,但不要这样做! 而是返回 DictTuple

【讨论】:

    【解决方案2】:

    我刚刚为我的上下文重新尝试了一个已经发布答案的解决方案

    a = ['1x', '2y', '3z']
    b = ['1xx', '2yy', '3zz']
    c = ['1xxx', '2yyy', '3zzz']
    arr = [a, b, c]
    
    for name in arr:
        xx = [tpl[0] for tpl in filter(lambda x: name is x[1], globals().items())][0]
        print(xx)
    
    >>a
    >>b
    >>c
    

    【讨论】:

      猜你喜欢
      • 2013-06-26
      • 1970-01-01
      • 2020-12-13
      • 2013-08-27
      • 1970-01-01
      相关资源
      最近更新 更多