我在python中有这段代码。
import sys
list1 = ["A", "B", "C"]
list2 = [1, 2, 3]
myarg = sys.argv[1]
print len(myarg)
我将从命令行运行此脚本,如此
python script.py list1
所以我需要一种方法来使len与列表而不是变量一起工作,我只想在var中给出列表的名称。
我知道这个例子我可以做到
if myarg == "list1":
print len(list1)
else if myarg == "list2"
print len(list2)
但是我的脚本上有13个列表,我需要一种方法来通过命令行给出的名称来引用它们。
答案 0 :(得分:8)
虽然这在Python中是完全可能的,但它不是必需的。这里最好的解决方案是不要这样做,而是改用字典。
import sys
lists = {
"list1": ["A", "B", "C"],
"list2": [1, 2, 3],
}
myarg = sys.argv[1]
print len(lists[myarg])
您注意到您的脚本中有13个列表 - 您有许多类似的数据(或需要以类似方式处理的数据),这是您想要数据结构的标志,而不是平面变量。它会让你的生活更轻松。
答案 1 :(得分:2)
既然有可能,并认为@ Lattyware的答案是正确答案,那么可以这样做:
import sys
list1 = ["A", "B", "C"]
list2 = [1, 2, 3]
myarg = sys.argv[1]
print len(globals().get(myarg, []))
如果打印0
,则命令行上的参数不正确。
答案 2 :(得分:1)
你不应该,但如果你真的想/必须这样做,你可以使用globals()
:
print len(globals()[myarg])
首先确保myarg
是声明变量的名称:if myarg in globals(): ...