【问题标题】:Is it possible to find the original name of lists put in another list, by interacting with the latter list?是否可以通过与后一个列表交互来找到放入另一个列表中的列表的原始名称?
【发布时间】:2019-09-11 09:38:13
【问题描述】:

我有几个列表(来自其他地方的原始数据),我将它们收集在另一个列表中,以便稍后在代码中处理。 (因此,如果我要编辑我正在使用的原始数据,我可以只更改原始列表,编辑所有列表以反映添加/删除的列表,并让所有后续代码反映这些更改,而无需我更改任何内容其余代码。)

像这样:

a=[1,2,3]
b=[55,9,18]
c=[15,234,2]

everything=[a,b,c]

在某一时刻,我想使用原始列表的名称(在我的示例中为“a”、“b”和“c”)。 有没有办法让我使用我的列表“所有内容”来访问放入其中的列表的名称?

(所以对于代码

for i in range(len(everything)):
    print('The data from',???,'is',everything[i]) 

???将被理想打印的东西取代

The data from a is [1, 2, 3]
The data from b is [55, 9, 18]
The data from c is [15, 234, 2]

)

【问题讨论】:

  • "有一次我想使用我的原始列表的名称(在我的例子中是'a'、'b'和'c')。有没有办法让我使用我的list 'everything' 以访问放入其中的列表的名称?”一般来说不,你不能。对象不知道发生引用它们的变量名。您应该自己跟踪这一点,而不是依赖涉及内省全局命名空间的黑客攻击。

标签: python


【解决方案1】:

您可以为此使用字典。

a=[1,2,3]
b=[55,9,18]
c=[15,234,2]

everything={'a':a,'b': b,'c': c}

for i in range(len(everything['a'])):
    everything['a'][i] += 10

print(everything)
# >> {'a': [11, 12, 13], 'b': [55, 9, 18], 'c': [15, 234, 2]}

print(a)
# >> [11, 12, 13]

for var, val in everything.items():
    print(f'The data from {var} is {val}') 

"""
>>The data from a is [11, 12, 13]
The data from b is [55, 9, 18]
The data from c is [15, 234, 2]
"""

【讨论】:

  • 代替第一个 for 循环,您可以简单地执行以下操作:everything['a'] = [i + 10 for i in everything['a']]everything['a'] = list(map(lambda x: x+10, everything['a']))
【解决方案2】:

有一种方法可以做到这一点,但使用字典等同于您的情况,因为它的键是唯一的并且可以用作您的变量名。因此,您可以使用字典检索值并以您需要的任何格式打印它们:

a = [1,2,3]
b = [55,9,18]
c = [15,234,2]

everything= {'a': a, 'b': b, 'c': c}

for k, v in everything.items():
    print(f'The data from {k} is {v}')

【讨论】:

    【解决方案3】:

    如果您尝试使用 id 访问变量名,则可以使用它。

    a=[1,2,3]
    b=[55,9,18]
    c=[15,234,2]
    everything = [a,b,c]
    
    def get_name(your_id):
        name = [x for x,_ in globals().items() if id(_)==your_id ]
        return(name[0])
    
    for i in range(len(everything)):
        print('The data from',get_name(id(everything[i])),'is',everything[i]) 
    

    这个输出:

    ('The data from', 'a', 'is', [1, 2, 3])
    ('The data from', 'b', 'is', [55, 9, 18])
    ('The data from', 'c', 'is', [15, 234, 2])
    

    globals 是一个内置函数,它返回全局命名空间中的变量/值的字典。所以你可以得到给定 id 的变量名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多