首页 > 解决方案 > 将列表名称创建为字符串后如何打印列表?

问题描述

我有 3 个列表,我想用函数打印它们。

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

def list(number):
    list = 'list' + str(number)
    for items in list:
    print(list)

我想要的结果是

list(1)
1
2
3

我应该如何编写我的函数,以便在创建它的名称后打印一个列表(如上所示)?谢谢!

标签: pythonpython-3.xlist

解决方案


您可以使用locals()它,甚至globals()取决于范围。对你来说,这个范围现在似乎是全局的,因为变量在函数之外,所以:

for key, val in dict(globals()).items():
    if "list" in key:
        print(key, val)

这样做的问题是,大多数情况下你不想要它,因为它会包含其他符号(函数、变量、模块等),所以更明智的做法是为此创建一个单独的字典并从中读取。

myvalues = {
    "list1": [1, 2, 3],
    "list2": [4, 5, 6],
    "list3": [7, 8, 9]
}

def get_list(number):
    return myvalues[f"list{number}"]

print(get_list(1))

注意:正如其他人在评论中指出的那样,list在 Python 中已经是一个东西,所以如果你不知道自己在做什么,将它用作名称是不明智的。例如,一旦你这样做了,你就不能再(在那个范围内)list作为一种类型进行访问,例如,除了通过列表理解或其他 hack 以外的方式将任何东西转换为列表,因为你基本上已经删除了唯一的(公共)事物有能力做到这一点。

注意2:eval()如果使用不当是邪恶的。对于此用例,您不需要它。如果有的话,大多数情况都可以由 处理literal_eval(),尽管我认为这在这里无济于事。


推荐阅读