【问题标题】:Access the name of a list in a Python print statement在 Python 打印语句中访问列表的名称
【发布时间】:2017-02-02 16:41:02
【问题描述】:

我正在运行 Python 3.6 和 Pandas 0.19.2,并希望按如下方式访问列表的名称:

# work on the following two lists
for list in [list1, list2]: 
    # loop through items in each list
    for entry in bucket_set: 
        # do stuff
    # let user know I finished working on list x
    print('i just finished working on: '+list)

在第一次迭代中,这应该做一些事情,然后打印出:“我刚刚完成了 list1 的工作”。但是:当我运行我的代码时,我收到以下错误:

TypeError: must be str, not list

这很有意义(列表毕竟不是字符串),但是有什么方法可以让我的列表名称作为字符串 ('list1')? 我知道我可以使用 dict 代替(这就是我现在正在做的事情),但我仍然很感兴趣。

【问题讨论】:

  • 不,你应该使用字典。变量就像 Python 中对象的便签标签,没有太多理由尝试将它们生成为字符串。可能吗?通过查看locals(),可能在某种程度上。
  • 没有。名称list(您不应该使用它,有一个名为list 的函数)在循环的第一次迭代中映射到与名称list1 相同的值,但@987654329 之间没有关系@和list1
  • 不容易或可靠地,对象不知道其名称,并且在不同的范围内可能有许多不同的名称。你可以做一些奇怪的事情,比如通过globals()locals() 搜索,使用is 将每个值与你的对象进行比较,但这在很多情况下可能会失败。
  • 名称指的是对象,但对象对绑定到它们的名称一无所知;阅读nedbatchelder.com/text/names.html
  • 这个问题看起来和这个类似:- Python Introspection - How can i get name of the object?

标签: python


【解决方案1】:

您可以创建一个通常封装名称的类,但是当字典就足够时,这会产生很多开销。

class NamedObject:
    def __init__(self, name, obj):
        self.name = name
        self.obj = obj

    def __getattr__(self, attr):
        if attr == 'name':
            return self.name
        else:
            return getattr(self.obj, attr)


unnamed_list = [1, 2, 3]
named_list = NamedObject('named_list', unnamed_list)

print(named_list) # [1, 2, 3]
print(named_list.name) # 'named_list'

【讨论】:

  • 在这种情况下,我会坚持使用字典。不过感谢您的帮助!
【解决方案2】:

您可以创建类或字典,也可以迭代您的变量。

my_list = [1,2]
my_var_name = [k for k,v in locals().items() if v == my_list][0]
print(my_var_name)

它给出'my_list'

注意列表值必须是唯一的!

【讨论】:

    【解决方案3】:

    有很多选项,其中之一是repr(list)

    【讨论】:

    • 这不只是给出对象的字符串化值吗?
    • 是的,从这个问题我认为他/她想打印列表
    • @HumbertoPinheiro 不,OP 想要打印列表的 变量名 - 您的解决方案完全没有抓住重点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多