python - 将列表名称创建为字符串后如何打印列表?
问题描述
我有 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
我应该如何编写我的函数,以便在创建它的名称后打印一个列表(如上所示)?谢谢!
解决方案
您可以使用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()
,尽管我认为这在这里无济于事。
推荐阅读
- chart.js - 如何在 x 轴上显示半小时刻度
- wkhtmltopdf - 文本在表中重叠
- datomic - 排除某些 id 的查询
- kotlin - 模拟每个 {}.throws() 异常失败测试
- asp.net-core - Blazor - 使用移动设备访问已发布网站时出错
- google-analytics - 主机名流量和 ISP 域访问有什么区别?
- sas - 如何使用 CATX 函数连接空间?
- php - 我应该如何重新编码我的 Phalcon v2 PhalconCrypt php 以使用 v3?
- google-cloud-firestore - Firebase .where() in 子句以与传入数组相同的顺序返回响应
- python - 有没有办法在 Azure ML Studio 中取消注册环境